diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 4934f471..b1ede0e5 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,25 +1,25 @@ lockVersion: 2.0.0 id: bfe29c99-6e67-43fe-b928-64d6a5ed6aa8 management: - docChecksum: 697788431789786cfa83be848849c06e + docChecksum: 626e43a251d2d50b8fd81209939699da docVersion: "2026-05-12" - speakeasyVersion: 1.793.0 - generationVersion: 2.928.0 - releaseVersion: 7.0.0 - configChecksum: c2bb35f7904ba3793c101e3fc39c921a + speakeasyVersion: 1.796.4 + generationVersion: 2.935.1 + releaseVersion: 7.1.0 + configChecksum: 3d1861a3c4469d562d60e30a0fdb154a repoURL: https://github.com/clerk/clerk-sdk-python.git installationURL: https://github.com/clerk/clerk-sdk-python.git published: true persistentEdits: - generation_id: 713e9127-042c-4ca5-a77e-1b540b7ddbf6 - pristine_commit_hash: 632f508698b4ab30075077e851dbd06f7b63640a - pristine_tree_hash: 92c16c0147bfc11156ca377b8346f742c3915604 + generation_id: ca30e2ad-1960-4a60-a760-6aacc9761bbb + pristine_commit_hash: 987200b16b72008b661da2bd8d8f5c8fce823d0a + pristine_tree_hash: dc12458db6f07e49b70a35c506c93e2b82cec64c features: python: additionalDependencies: 1.1.0 additionalProperties: 1.0.2 constsAndDefaults: 1.0.7 - core: 6.0.35 + core: 6.1.2 customCodeRegions: 0.1.2 defaultEnabledRetries: 0.2.0 deprecations: 3.0.2 @@ -39,9 +39,9 @@ features: nullables: 1.0.2 openEnums: 1.0.4 responseFormat: 1.1.0 - retries: 3.0.7 + retries: 3.1.2 sdkHooks: 1.3.0 - unions: 3.1.8 + unions: 3.1.9 uploadStreams: 1.0.3 trackedFiles: .gitattributes: @@ -136,6 +136,10 @@ trackedFiles: id: 437bf42a480e last_write_checksum: sha1:2ed0f0910cf969bc42c47c64b5a61699f161da34 pristine_git_object: c8483a7ae0ce2d5e141db3e26a02072c26356ad4 + docs/models/amountoff.md: + id: 257dffb98858 + last_write_checksum: sha1:fc10cd2b0fa5b88e31d720f4e8abfefdc2f0727c + pristine_git_object: 93e4bc23589274f8f289d8f844fe1044d150c520 docs/models/annualfee.md: id: 5495a6a04cbb last_write_checksum: sha1:9c414d8feacb38f9ff838ef62dc92e7dd295a755 @@ -144,6 +148,14 @@ trackedFiles: id: 5e606753e053 last_write_checksum: sha1:23d36d6681f7c5d082a16efedfc58aeeb14d9c3a pristine_git_object: 513878377e129fd04fa9af41f9fc3a49247a7dbe + docs/models/applybillingsubscriptionitemdiscountrequest.md: + id: ca9b8b549bf4 + last_write_checksum: sha1:c9b29edc773e18ef4959742677818822da6378e9 + pristine_git_object: ba5f4ef10aa432d10d6c79e059aefb97b4907372 + docs/models/applycommercediscountrequest.md: + id: 4b6cd262e8d1 + last_write_checksum: sha1:fb4cce5fe84b8975cbe94e1d922e7039a1155b4a + pristine_git_object: ffa2fe407dafe6fa78cce5d7f81d7d1365afc581 docs/models/assignpermissiontoorganizationrolerequest.md: id: b50cdf08b8fa last_write_checksum: sha1:6ee753e737974201fbc0d790f9f766db46835cb2 @@ -168,6 +180,10 @@ trackedFiles: id: fb5d1e88accb last_write_checksum: sha1:ba49223ef048a6838f8a8047b51aede392372c3f pristine_git_object: 485ed65f7bf554c5e5c564ba7e60bfbb95fa9f4b + docs/models/automationdisposition.md: + id: 2024549f35d2 + last_write_checksum: sha1:cddcb82789a1bfdc3ba9500b9ce052ad04dc76fe + pristine_git_object: 91fc33449e343d5e2530c42b1d7d3793cef04f23 docs/models/balance.md: id: 9de59403580f last_write_checksum: sha1:245fc1de014969c5802cb417b69e53ab37c5fb03 @@ -248,6 +264,30 @@ trackedFiles: id: 1f4c8193dd36 last_write_checksum: sha1:c0b1f2682e16660c80798fd317596ec5cbc8f750 pristine_git_object: 4e5ef1930bc9c9075b9b4cb0ab35dffcc6fa383a + docs/models/biometriccredential.md: + id: ab378dc963d4 + last_write_checksum: sha1:7c848b0f4a992b3dc62002470d5396fdb3ec6f84 + pristine_git_object: 895f4d13b34eb0ac2dc0f03f844540fc8995606c + docs/models/biometriccredentialalgorithm.md: + id: 7507b0512805 + last_write_checksum: sha1:46c8725d543027d7ce0d749536c0f346b7655625 + pristine_git_object: 4597410f50a43c72bd06fca347ae2190d9df288f + docs/models/biometriccredentiallist.md: + id: e61ab4c86c7a + last_write_checksum: sha1:5e2f9bca579f8a4ed15c3748172951aa4e72c4a6 + pristine_git_object: 707926afea972523de24d09787a6c43754ab4c3a + docs/models/biometriccredentialobject.md: + id: e33e9d499790 + last_write_checksum: sha1:9b22cad811f4619816cbd7e8a4e1e9ca67dfb023 + pristine_git_object: 9db0bfc14cb7cfd052c00f91d46f08effbb6562d + docs/models/biometriccredentialplatform.md: + id: 36215a67bb1a + last_write_checksum: sha1:8347ea998dc0d5a816986524bddd1b759a401e47 + pristine_git_object: e7df5e8e55214fde950d07381e8e0098cda73d42 + docs/models/biometriccredentialstatus.md: + id: b589d4d98d21 + last_write_checksum: sha1:0546825cb14905a6739853a084f94d749a77dd8d + pristine_git_object: f7fed76b25073eb9d1ceca26a5e2f33aa0ba6b3c docs/models/blocklistidentifier.md: id: 065341f0dc2c last_write_checksum: sha1:5b4311c5bc7864c5d002fc8707a722e70ec14ac4 @@ -304,6 +344,22 @@ trackedFiles: id: c10a47febf1e last_write_checksum: sha1:dd426cbaa218ab979202e4f3e50066335d0f8fb1 pristine_git_object: e425af5150274d18aa14dc75b3dbe80bf4623980 + docs/models/commercediscountredemptionresponse.md: + id: 4b0075622c74 + last_write_checksum: sha1:236f0a60f2a359869069829dbd6ec47f77ce783c + pristine_git_object: c9b5cb55d31d2b9368f5fe3acd253326e0194e46 + docs/models/commercediscountredemptionresponseamount.md: + id: f8ad0eb32978 + last_write_checksum: sha1:b9d991105f2777145420ed88c8f5500c09ff56bb + pristine_git_object: 1b2052ad30542b544b2f1c071a19c30b48b53291 + docs/models/commercediscountredemptionresponseobject.md: + id: dd34d916d0ae + last_write_checksum: sha1:086866649ebfc4491c6d4ec6b5e4c0211c4d1ae6 + pristine_git_object: 69744b42410c1b02ef09735433ec65ec496f35f0 + docs/models/commercediscountredemptionresponsestatus.md: + id: c7ef76a625e4 + last_write_checksum: sha1:c98cd6ee923196bc2c9b9e01abc591cdfd7d8a77 + pristine_git_object: 852ca17216e37ba24c04f8984063db7b1833ebaf docs/models/commercemoneyresponse.md: id: 1c98825160a2 last_write_checksum: sha1:9bfac9d7136d4aa0c1e251f88c11e6c6acacb1f4 @@ -730,8 +786,8 @@ trackedFiles: pristine_git_object: 4d75bfc9b72f4a5890dfc567884beb8fddc7e211 docs/models/createbillingpricerequest.md: id: 125c5d321b4f - last_write_checksum: sha1:029926b9e0ec7f27e05c95eef415bb1137884b5b - pristine_git_object: c22de3174d726b79c767be67bc28bb21e4135d86 + last_write_checksum: sha1:e7ac04313ac9cf7db0c828e99e02a5c1845777a0 + pristine_git_object: 6bbdc8abb1f033f5cfb57571b6d3db77c55aab4b docs/models/createbillingpricerequestsupportedbillingperiods.md: id: 74334c90add4 last_write_checksum: sha1:6bb061dcb48dbf7e4acc673c07b300094ef05522 @@ -752,6 +808,22 @@ trackedFiles: id: 61baae306317 last_write_checksum: sha1:cbc03a23c8622983a0a9f69784f6abc760269c0b pristine_git_object: 809e0161e33a21d5962f7ddecc4ac7624b77e75d + docs/models/createdirectorygrouprolemappingrequest.md: + id: 97bcc1874136 + last_write_checksum: sha1:36d00b7bae5d886c997af6956c9b8262d0855371 + pristine_git_object: 950d477b761fbda8ce2b0a7c6151de31e09e471e + docs/models/createdirectorygrouprolemappingrequestbody.md: + id: 906931a0569c + last_write_checksum: sha1:1f7573b20c17ea5e21df47a3313b8c73b34bde39 + pristine_git_object: b58fb822e53fe8e6bb6301a9b08dbc9cc903bbc6 + docs/models/createdirectorygrouprolemappings.md: + id: 58861a6ba625 + last_write_checksum: sha1:1e6ecd9391a9a36e30ec25e7fd3880eec332cda8 + pristine_git_object: 996168ab135ae731e1244fa9fe163b88bb9aaccd + docs/models/createdirectoryrequestbody.md: + id: 6b1e4e72e2a3 + last_write_checksum: sha1:bf685e7ec9b7b4e69c3b4c927c5d23f272c96065 + pristine_git_object: 704002b7e3190cab04691f491f5b5d741fc79ed3 docs/models/createemailaddressrequestbody.md: id: 4dbf1f84fdc5 last_write_checksum: sha1:c97e30acba7da180447f12ad494a1ca63efacc77 @@ -762,8 +834,8 @@ trackedFiles: pristine_git_object: 0a71dccc66dbe435ccd8d8bbf6d618a510119154 docs/models/createenterpriseconnectioncustomattributes.md: id: c0f9ed259c84 - last_write_checksum: sha1:50bdf8ba9fc777c24e8b141cb98e05c00ed2f803 - pristine_git_object: c29c07de7564b33b47c303de0fe167f31b9db648 + last_write_checksum: sha1:1266ed21a6979f4a00639014b72bf973a34f08da + pristine_git_object: 66ba2b5fc5bfd5ba9ff30292abf51b5ef111722b docs/models/createenterpriseconnectionloginhint.md: id: 23ed4c4da31c last_write_checksum: sha1:e054f3f9df4f6a908409fe3fd07e20c9dfb363f6 @@ -838,8 +910,8 @@ trackedFiles: pristine_git_object: b3c04da02ecdc10ba1555ead1406c851d0c9e1fa docs/models/createoauthapplicationrequestbody.md: id: 45bd6e7b45a9 - last_write_checksum: sha1:16725ddfd5099de905a3e8d735abb789743a4cd7 - pristine_git_object: ff89eabb28a970548692c08632165982732945a9 + last_write_checksum: sha1:9e68a7ca2d38577c9cefbca59584601ed2c0ea72 + pristine_git_object: 502f37159c8bbb47a30d916dddbe50a248c4eafc docs/models/createorganizationdomainrequest.md: id: 0d33f66e0304 last_write_checksum: sha1:04907af07241cab5f9f1905dce5e32e026aa6ba0 @@ -922,12 +994,12 @@ trackedFiles: pristine_git_object: 11d1e9fecbe39b10995951e05997c098a282f643 docs/models/createscimdirectoryrequestbody.md: id: 7e26412f6980 - last_write_checksum: sha1:39c40b6b40e5a8bcba8fb17746b109f47d70393d - pristine_git_object: fb02290e88d8aba84cbcbf02ebac16126cd93f94 + last_write_checksum: sha1:b0272e364605a50912fc366c059ba146d0dbc478 + pristine_git_object: 1ef252f05f16bd38fa92726ceda700ffd3132116 docs/models/createscimgrouprolemappingrequest.md: id: 960578750be4 - last_write_checksum: sha1:8cc6a46365a303af8fce088c0c0e0d5abfe2e37e - pristine_git_object: 0545b089369817c31a0be0c8630611f6ce7774e8 + last_write_checksum: sha1:f367eff1c00c802462d3e5fbe000ee35b98501e5 + pristine_git_object: 9988d51c132ab39458637154df1bfdf7d305cccd docs/models/createscimgrouprolemappingrequestbody.md: id: c24c69a9c54f last_write_checksum: sha1:f3fdc001718eb7da7e452d8ca83f13fe195c5a21 @@ -974,8 +1046,8 @@ trackedFiles: pristine_git_object: 801386d2fd6a0e310eb162ec5dc03444b4be46a4 docs/models/createuserrequestbody.md: id: 39d743a30444 - last_write_checksum: sha1:6833cfc2a4b900d021b17b5752749af9a200eb1c - pristine_git_object: 70f2edbe943bed60e2fd9eb62c3ef619cd91d333 + last_write_checksum: sha1:385c2fe1f71e18683adf1663da2461df6bb46aae + pristine_git_object: 9e0bae8265b57cb3585aa5850677d6e9de3fb014 docs/models/createwaitlistentryrequestbody.md: id: 181ff2ee24c2 last_write_checksum: sha1:65f994c81871aa15c81f31fdca105e6831cc87c8 @@ -994,8 +1066,8 @@ trackedFiles: pristine_git_object: 2462c6f9b079d5f1d4d8f340e2418fccff59a20d docs/models/customattributes.md: id: f92493c0ab68 - last_write_checksum: sha1:c6fe8c9c671033d9425a6bfcd409b933c5e5e576 - pristine_git_object: bde59d99cc747c66a4c74c26010ac7ed744ff778 + last_write_checksum: sha1:0036742b6afef918ff8ca701cb09883fde5a3bcd + pristine_git_object: 8c681807607fbdaaf4a243df178046eac02b3838 docs/models/data.md: id: 9a31987caf78 last_write_checksum: sha1:b1fda835a4dde5725d68615b0cf7eedfe06bab9f @@ -1048,6 +1120,14 @@ trackedFiles: id: 385a238156ef last_write_checksum: sha1:f67d246807ee5c59b47f50a52b7ecd0fc1a44823 pristine_git_object: 436cc0c5e15e3487073aa8eacffef2fcbaa5c411 + docs/models/deletedirectorygrouprolemappingrequest.md: + id: 898e5367713e + last_write_checksum: sha1:8c615f397491f6fa0dc62c23bc4b2c91bab3bdfd + pristine_git_object: a2265c1085af8cca853db669a499fd469e68d0a9 + docs/models/deletedirectoryrequest.md: + id: d31dacc78370 + last_write_checksum: sha1:e053571c89e7712f6e3890c471368a245afe8106 + pristine_git_object: 4a4b6bcf8e5e7b6355cc201e9d3601e69f622c20 docs/models/deletedobject.md: id: 08a28edce319 last_write_checksum: sha1:7c2a4fdebd23fe19102a4cbebf0cca7ba761c2d0 @@ -1122,12 +1202,12 @@ trackedFiles: pristine_git_object: ef4a7a8a8a5c23a9aa93a4cdb297c0d930779939 docs/models/deletescimdirectoryrequest.md: id: ed0a8a10ee93 - last_write_checksum: sha1:af212df27429da54bd32697b561ccb76e956df79 - pristine_git_object: adfb92e9364deccea07bd38ba182f1a7a460fbbd + last_write_checksum: sha1:74cc3fabdd9e12ea05cf3fc70d037ecc6ea544c0 + pristine_git_object: 0309e3adedf9c9d90739d6580bd64105ef767a14 docs/models/deletescimgrouprolemappingrequest.md: id: 86270943bf9a - last_write_checksum: sha1:b3825285a7734032fa2abb034bb0ec9814aa1690 - pristine_git_object: ae62890c6b85eca6aaf9dd2dd1b8c6b50de09ac3 + last_write_checksum: sha1:9a137e08d4b27d6b53ae55b1d08346969ff15a0f + pristine_git_object: 91b3eac3f96dfae4e0b4e8571a1b98f28358eb6e docs/models/deletetotprequest.md: id: 9f7e7b44a40d last_write_checksum: sha1:576dc53ea968a95b38c6721a8337690c915a5c69 @@ -1148,6 +1228,42 @@ trackedFiles: id: f48685a3c3be last_write_checksum: sha1:ee0ba1d9a449ad93a5f8692e6341b2e3ec51bf88 pristine_git_object: c818f01af862720b57f2e4cbb1273c051d0cb6b6 + docs/models/directory.md: + id: 109971113ef3 + last_write_checksum: sha1:a4205a30d0fb55f2568c169345e1039024ec1575 + pristine_git_object: 57770c03cd13a93ad49198fb808c4894a4321b34 + docs/models/directorycustomattributes.md: + id: c2cfe37f62b9 + last_write_checksum: sha1:2a392538f0908d46a73b4e36b3c8d25a10994a88 + pristine_git_object: 9c6403c8924ddcf8b241dca21ce3db6f8ebd96d3 + docs/models/directorygrouprolemapping.md: + id: 6a7d648fd75b + last_write_checksum: sha1:ff155880766564e28e6278b1496f94d1ebc51b93 + pristine_git_object: 59d9b5a2e141734632faeb33b3864f66e20ac602 + docs/models/directorygrouprolemappingdeleted.md: + id: 3061fb4daf2b + last_write_checksum: sha1:fea0722a89cc993452185bc76df9d6b45eca8547 + pristine_git_object: 73bdbd3806854975e3a95c64925cf380effe57cb + docs/models/directorygrouprolemappingdeletedobject.md: + id: b1ed928e2ab9 + last_write_checksum: sha1:e4ba5c6b7e553b1621a8af70f700a9d55680f6e4 + pristine_git_object: e6b1b86b4cb791aa423d1b45afe05163e5df527d + docs/models/directorygrouprolemappinglist.md: + id: 15eff6df4059 + last_write_checksum: sha1:0adc50c5875a38466fd785a5743f74c0d6b8c723 + pristine_git_object: c0e2f35d74aa5b7b1bae5cd7d903e511f30fe682 + docs/models/directorygrouprolemappingobject.md: + id: 34c97bc9a34c + last_write_checksum: sha1:62781abf5c22b0823c805b6def0b8eaa38fae639 + pristine_git_object: aad750cac068b1fc0118a85f1b9bae2b170ae40d + docs/models/directorylist.md: + id: 99aaeda6a392 + last_write_checksum: sha1:99806861f952dd83a7e53b498943b31dc8c3b630 + pristine_git_object: d08283ace7e0909b0cf83a5c6c338299981c8f34 + docs/models/directoryobject.md: + id: 7cd1c9b010ad + last_write_checksum: sha1:d723492ce93788f4236f42f61d04e78403e0b028 + pristine_git_object: 289d0a9d58499265cc489f68c3e618e3a78fece1 docs/models/disablemfarequest.md: id: de11d9cb764c last_write_checksum: sha1:950e070daaeb7888f40a399376b4b33a532c03fa @@ -1160,10 +1276,14 @@ trackedFiles: id: 57315014cc20 last_write_checksum: sha1:c991e47686f2d98000e23eece365f5d4c5f4a59a pristine_git_object: cccfb8e213dbac763d66be7d95e762e06921cb66 + docs/models/dnstarget.md: + id: 44dfca8dbe67 + last_write_checksum: sha1:f04bb50b1a25266dba37e8706ffac8a88386f634 + pristine_git_object: 8ac13dced124d24ab960497e6d9f1ec3a5370eb6 docs/models/domain.md: id: 8fe01d6f9715 - last_write_checksum: sha1:2286db2aa5384eddbea302de5ef3e42c8ec29983 - pristine_git_object: 263366c8f98acd8ae08ee1c2809bbd9f21c164d5 + last_write_checksum: sha1:fbd32b44faa43bada451879eff05365b0b5824dc + pristine_git_object: abc1e69d91c0ff666c124cff3b3f703be7209598 docs/models/domainobject.md: id: ad7e42f05d05 last_write_checksum: sha1:4c360a2d498f3c36ef31a00263598150d8b2518b @@ -1176,6 +1296,10 @@ trackedFiles: id: 4e588929b81e last_write_checksum: sha1:4dddba1682cdd51711acee1a6fb1971167bdda45 pristine_git_object: adb540962feaa454e4304b49433e82d8be70d9cb + docs/models/effect.md: + id: f303b7ac2bfa + last_write_checksum: sha1:911c6f87cada71d0a2432ed1d4cf6dc86dea0cf3 + pristine_git_object: 271ef55bc74e9926a9ca642b6872da8a76161614 docs/models/effectivemode.md: id: 7e6572459bba last_write_checksum: sha1:8717e6b2fb6431fe18032829cb019de63655a676 @@ -1448,6 +1572,10 @@ trackedFiles: id: 2e8d9dfc0bf7 last_write_checksum: sha1:51ab6504e0bb1d7d446b85dc59b5a3c26b1346d1 pristine_git_object: 97f753d00cc73e88f95a793a53faee93d6a41b50 + docs/models/getdirectoryrequest.md: + id: be9e0d863e04 + last_write_checksum: sha1:9e88aa1490ffc2787e8af5c52e0958c8ee81b2f7 + pristine_git_object: 1a722df6420e045b09b0a5018e36a276da075296 docs/models/getemailaddressrequest.md: id: 57a7f3e89a25 last_write_checksum: sha1:cc4f93bdf0285000967c1f86dde750151d66d95d @@ -1558,8 +1686,8 @@ trackedFiles: pristine_git_object: 3ad48adbe286b7c6087e425c13216c67ad023046 docs/models/getscimdirectoryrequest.md: id: 3f9bd0bc4525 - last_write_checksum: sha1:351700020e9bec5e558ce99454ea981b181f6750 - pristine_git_object: 35d4c28aafae82af6fbaf33b37662aa782af1004 + last_write_checksum: sha1:a8522ad38221be4759974e425259af6ab6ed5d51 + pristine_git_object: b67531b9355109f600fe99a77048143e526cea84 docs/models/getsessionlistrequest.md: id: a7b36e349d7e last_write_checksum: sha1:a786c4cbba884f5a3c285ac10de5789478d89b01 @@ -1590,8 +1718,8 @@ trackedFiles: pristine_git_object: 3388f03ed9d74740c4df488dd484e7d284dcb648 docs/models/getuserlistrequest.md: id: 37ba0c409fc7 - last_write_checksum: sha1:3b1b814aca474f3e1ca03f2d470d6b966f98ac18 - pristine_git_object: 032f7feb306c7818d4088c273c75f77b328a93b6 + last_write_checksum: sha1:1e1828e285dd019f9132eaca639427fb35b61716 + pristine_git_object: 6d24e259d68f8720b70527f7faa8c2d2a2f2fe59 docs/models/getuserrequest.md: id: fb9562549f5c last_write_checksum: sha1:e7b5b9376186d2fe8606ba94dca59fb77b4fc006 @@ -1634,8 +1762,8 @@ trackedFiles: pristine_git_object: b48357a43d35d073dfa859481bec74cfcfc3aed1 docs/models/instance.md: id: 1686b90f785a - last_write_checksum: sha1:ae69fdb643e45126672972eb4f7bc69bb75e19d1 - pristine_git_object: 4c3ecca21b6b5dc240c21e1e0b759896f32e1bef + last_write_checksum: sha1:539b8f64aee08008efb50eeb7e61aaca770a86fd + pristine_git_object: b0a2c2a6236662beb2dfe90a74bfbb554d569b43 docs/models/instancecommunication.md: id: fda9399b4636 last_write_checksum: sha1:e398f2ba67b5f8e6f08eca47df5aec19d811fffc @@ -1654,8 +1782,8 @@ trackedFiles: pristine_git_object: 5c708611ccf3db97aa9d20ca3c92d4c35e80a147 docs/models/instanceprotect.md: id: e5c5b3f574c4 - last_write_checksum: sha1:652996fca71468ea8f79f0df89d16c8616cef631 - pristine_git_object: e7cade8678ebac2323be20e9f2447df70aa8b51c + last_write_checksum: sha1:833d04474d39d8a98e4863abe1f8fcf7468be1ce + pristine_git_object: 4790c15f8267c3c18b88eb05701b222bb78d3101 docs/models/instanceprotectobject.md: id: 0e9e3abf5631 last_write_checksum: sha1:ca376d94fe13d5e8f96f240b689a3b7dd4eb6a8f @@ -1670,8 +1798,8 @@ trackedFiles: pristine_git_object: 5d0d0907ea08dcdc5f350a8fe76e4bb8fb430261 docs/models/instancesettings.md: id: 2760a8ce514e - last_write_checksum: sha1:81f406c89938e582636c4915e36516417a52f40e - pristine_git_object: 8f594f0f91a66e5662b3229630ee466c9e64cecf + last_write_checksum: sha1:2b3ed86027af3c25699a179d408ec740c4e7afcc + pristine_git_object: e60115f03932d842935054a5ccac2742b942f6df docs/models/instancesettingsobject.md: id: 1e8b69151a9b last_write_checksum: sha1:2d53b6890659a3946c71323ccff7c3f74def8b25 @@ -1736,6 +1864,14 @@ trackedFiles: id: 66ad0f5fad87 last_write_checksum: sha1:c2873fc83fe41d99dc53084f66b3b05451b8c26a pristine_git_object: 68b60601782bf04cf4faf8bca4d89f1fb4fd180c + docs/models/listdirectoriesrequest.md: + id: 2a30efaecf50 + last_write_checksum: sha1:b3ec258e4f138c212cc0e85f5fc1092c99d9fdb3 + pristine_git_object: 11dd654cc33b7fa6f5a61b13915966c61bd5b479 + docs/models/listdirectorygrouprolemappingsrequest.md: + id: 639184eaf332 + last_write_checksum: sha1:8215bce705482b6f80fb8eff05357351d57e9cb9 + pristine_git_object: 5e5b65a2ff0e6706399ea8dd127f591717de8e53 docs/models/listenterpriseconnectionsrequest.md: id: 83cb7c907159 last_write_checksum: sha1:e27d68a5716e2ed749d318545bdcb9c5d99d2b4f @@ -1774,8 +1910,8 @@ trackedFiles: pristine_git_object: 8636a34cbebe7854d21d5411177b838a8c566ce0 docs/models/listoauthapplicationsrequest.md: id: e1a7a4e77c2a - last_write_checksum: sha1:82b201e1fe711e348cae1e3e2fd98cbf3512cfd6 - pristine_git_object: 215fb5699807986fd7ea3e389826a5c648f7a44d + last_write_checksum: sha1:a7e5b05353a7bd1ffd86e618aa26b583abe07323 + pristine_git_object: 42a768cfd3a0874c2241b4148c68bd7cb2de0b6a docs/models/listorganizationdomainsrequest.md: id: 02c1f0ce56ab last_write_checksum: sha1:d3dedff453fa818a3a9b9ac3da0244e45ee7443a @@ -1826,8 +1962,12 @@ trackedFiles: pristine_git_object: f7d114894b071454a6c307006b050e9dba131deb docs/models/listscimgrouprolemappingsrequest.md: id: fe9b3882e652 - last_write_checksum: sha1:a3a5973c90796130fff443fa7b9979d527747a67 - pristine_git_object: 4c0e90d335f040a73947f51b3ac99a22d6fe385a + last_write_checksum: sha1:8c450e693201556784b86e9ff47bfe29127c0feb + pristine_git_object: 6fedce7abc30e6c0f4ffbc572ce52ee43b429a9a + docs/models/listuserbiometriccredentialsrequest.md: + id: c084dd8dff9f + last_write_checksum: sha1:4b8613d038de35e65ab9f3d5296ff2e96548e73c + pristine_git_object: af68dfa3fd5367be69c58ce85dc817b488eaf004 docs/models/listusertrusteddevicesrequest.md: id: 9816813c0eb3 last_write_checksum: sha1:376866b2944a48f4228ffa1f2b8ac33c49fa763b @@ -1962,8 +2102,8 @@ trackedFiles: pristine_git_object: d2e8f90a4613d273d778bfea4d11d209d4e6ae13 docs/models/oauthapplication.md: id: d86d5655dcc3 - last_write_checksum: sha1:9dcba33107d4ccf25ff57ff5e67989e4d67b2ba5 - pristine_git_object: 1cbd0cab8b9d7db16f7205cf5050bfc8d96a1e15 + last_write_checksum: sha1:707c872861a1224639583f56e81b3a7531506fd3 + pristine_git_object: 4e4d70877ed4bc0e44621fcd78d5be91311fb8d7 docs/models/oauthapplicationobject.md: id: ece18c7d6b54 last_write_checksum: sha1:873dfa9f8e09f7cc7a1836777826619637feda61 @@ -1974,16 +2114,16 @@ trackedFiles: pristine_git_object: 59da0c4647209a3f9972c680305848ed8cfe0efe docs/models/oauthapplicationsettings.md: id: 3b1146edc6ce - last_write_checksum: sha1:8bbc5df26a052415b1dc6f1a8af819844b76149e - pristine_git_object: 50ba3613b610f30d32021de23ebcf16cb88fa66f + last_write_checksum: sha1:ef4e57e732155c1c2cafc87d3ca3380284ddb4ba + pristine_git_object: 1632075273300b7a5d40c27d26f25aa177b80b43 docs/models/oauthapplicationsettingsobject.md: id: c5770eda5f50 last_write_checksum: sha1:881988cec4152828cc2cf49463133e8799b84dc5 pristine_git_object: f26add8e2ee06e38ee277dc23f626772e9ec0010 docs/models/oauthapplicationwithsecret.md: id: 0149fac6c198 - last_write_checksum: sha1:18c9c368cbe0a7031935c4c148ae309b5ff42f15 - pristine_git_object: 322320090a65dff123ac60ef821aaf62e4f94936 + last_write_checksum: sha1:aa1a0482baef63621668a51cb7841f11ce051e22 + pristine_git_object: 27db003b8ff8b3230a198ce50ecee12d6ddc335f docs/models/oauthapplicationwithsecretobject.md: id: d96235915152 last_write_checksum: sha1:b16a835ef5545aaac46ee23af2a4d8dd2dcf1b68 @@ -2010,8 +2150,8 @@ trackedFiles: pristine_git_object: ee0e12117b0e740b9caf3a5c47ab84e98d1797af docs/models/organization.md: id: ea9c215ca2eb - last_write_checksum: sha1:6b63d19916f5d8c770bd338bfe9dafb1ec258fa6 - pristine_git_object: fcd3db932ab90dcc16671006504c1d1c3199be63 + last_write_checksum: sha1:569a0085567132e3fbd4c4af0d2460cb3db11f03 + pristine_git_object: 1cb53c5c9965e9cc6c8eb1f9d7603be949580b84 docs/models/organizationdomain.md: id: 9d468a689277 last_write_checksum: sha1:0858f013051b76906cde1366d5ad119827102e22 @@ -2070,8 +2210,8 @@ trackedFiles: pristine_git_object: b875c052400cc3ee3f9fe82a0c8ff992687ef2a5 docs/models/organizationmembershiporganization.md: id: 15d8223f4731 - last_write_checksum: sha1:bc444ee7d509af1b5a2a2bb3db95c4aa03ae60a1 - pristine_git_object: 3b8b8c5e047d4f2a9a3f1fa8070478838a0d9eb8 + last_write_checksum: sha1:b89492a40c13cbbcaa3ba90550f11f547b649330 + pristine_git_object: 08cbcd660df64d7dfeed02533d8609cf5637b43b docs/models/organizationmembershiporganizationobject.md: id: 4f2629cb67a0 last_write_checksum: sha1:20b3570e30151da1f75075f6648ee90d87f741e2 @@ -2102,8 +2242,8 @@ trackedFiles: pristine_git_object: 1b8d964bf1a08bf08b425ad096b93cfd154a2224 docs/models/organizationwithlogo.md: id: 14d59dc62841 - last_write_checksum: sha1:ed129aa3cf7f260e780c320d7251d0ea9402b9dc - pristine_git_object: c84c2a661fff7f724267d88df67b1d1f3cc81245 + last_write_checksum: sha1:8fd5bfc18f8116d6519f3ce2ea8d5d880fd0339f + pristine_git_object: 81a0d7985c5ac2d304d296c2e1f14f7423d87232 docs/models/organizationwithlogoobject.md: id: 227d023013e5 last_write_checksum: sha1:cf0fa740d570b801c319d31352072cc848dee985 @@ -2288,6 +2428,10 @@ trackedFiles: id: 15628120923d last_write_checksum: sha1:f0fbc3a74aa9863d350a043c2451c35345541ee5 pristine_git_object: e7a27179273d79e27d4808de8c5d88d76244fb39 + docs/models/recordtype.md: + id: 4a0589693388 + last_write_checksum: sha1:4b918397eb4e3ff664b9fd7f1694e23a0c149336 + pristine_git_object: fea5b989366cb2f7cc195d3308d94c64125a3c16 docs/models/redirecturl.md: id: e73863be50d3 last_write_checksum: sha1:03efa4af02293262f7aa6074ba7b178fe5ec9de7 @@ -2308,6 +2452,10 @@ trackedFiles: id: b1da9047d018 last_write_checksum: sha1:dfbaa44b51f53c5ccff08b07e87621610dbdfe64 pristine_git_object: 6a9d1d22e26f9e40dbc9b2f35bfce046b0a097a6 + docs/models/removebillingsubscriptionitemdiscountrequest.md: + id: aaf4006bb7b5 + last_write_checksum: sha1:fb36b2c071cd03545adca05c7c0521279c24b1c4 + pristine_git_object: da803967fdf755c889362046c660513824e2329c docs/models/removepermissionfromorganizationrolerequest.md: id: "189798591810" last_write_checksum: sha1:4092d110a103a7389bc4f817e48a8a0d352bcb1c @@ -2320,6 +2468,18 @@ trackedFiles: id: d0728ac6d74d last_write_checksum: sha1:1936e2d068f12beea2582ec13adcc4668a5212be pristine_git_object: 6a5c29161734527e427cb629b243ae0bf5c43105 + docs/models/replacedirectorygrouprolemappingsmappings.md: + id: 5718c30fecfe + last_write_checksum: sha1:a3ebadec2da988bbcae080904e5c5eb39c6273c9 + pristine_git_object: a5fa6381a9c9d359d6fd372df99e96694b076d19 + docs/models/replacedirectorygrouprolemappingsrequest.md: + id: 75963fbb6b91 + last_write_checksum: sha1:876889ebb2b82fc834105023a1e04d27219eb017 + pristine_git_object: 1891cafa3bde26fbd03aac54e8921c6121d577f7 + docs/models/replacedirectorygrouprolemappingsrequestbody.md: + id: f6b08b31a29d + last_write_checksum: sha1:9330bdbc15475a2eacca7e9db90ce096f8624488 + pristine_git_object: 426b7474fd49dff97498b5e799014ef245b49dc8 docs/models/replaceorganizationmetadatarequest.md: id: 606ac6667bf1 last_write_checksum: sha1:87112667c012578e3c6caabaff08cff7ac23ee46 @@ -2346,8 +2506,8 @@ trackedFiles: pristine_git_object: 44aedc6069eff9adbd67411a14d6c1b299818a81 docs/models/replacescimgrouprolemappingsrequest.md: id: ba5eaf7a1f3f - last_write_checksum: sha1:d11b4374c4773ab793d10f2cf70d8fc925d1dc54 - pristine_git_object: 6e2b8ef3659d7f8f70855773f0a45291731ffce7 + last_write_checksum: sha1:658f8112bc8602add3f589bbc9bc75eb4bc61c7c + pristine_git_object: bbab2219ce6e87638bbc62ce99d0be5b297c18d1 docs/models/replacescimgrouprolemappingsrequestbody.md: id: 193b7578879b last_write_checksum: sha1:43d266c0261e657acc6172bb964344471fd11461 @@ -2576,6 +2736,10 @@ trackedFiles: id: 238fe3ea9602 last_write_checksum: sha1:04ac722453560ede07b95c4835564d6f4bddb492 pristine_git_object: f662579f31f3b089b053e8aa605c90d32fb48404 + docs/models/revokeuserbiometriccredentialrequest.md: + id: 8556772d0b56 + last_write_checksum: sha1:8c7f38f496de7e5aa6f9b85b64602c67fccce2fb + pristine_git_object: be671608e3c614da0247d57a972880042eeef6f3 docs/models/revokeusertrusteddevicerequest.md: id: c0e601b612f0 last_write_checksum: sha1:57b8dd289322f33b5aaa8330970df3baa3a53d0c @@ -2628,6 +2792,10 @@ trackedFiles: id: 6668f9469afb last_write_checksum: sha1:fc7130d1b99378aac027091e25501b41e29f20fa pristine_git_object: 4f8f7d7585e57cb998fb29e2b68baf0e78a33480 + docs/models/rotatedirectoryapikeyrequest.md: + id: c9684b87a94d + last_write_checksum: sha1:f19dd5c3ce90ec776ab5a0ce00ce278340c0973d + pristine_git_object: aa77493df9314ac7d55877bd3c7f9e12fefa5a05 docs/models/rotatemachinesecretkeyrequest.md: id: f06a22bf60f3 last_write_checksum: sha1:3b41509b12f478b6d51befc4716e5c841348a8f4 @@ -2642,8 +2810,8 @@ trackedFiles: pristine_git_object: 74a37a1de8ec1ccdb816369b1a587ed2c963f409 docs/models/rotatescimdirectoryapikeyrequest.md: id: f5e50ab1f077 - last_write_checksum: sha1:666db78d53ab768ee5afbe20f254a6b8b0e34c9f - pristine_git_object: 34a6fa732cc9be5bb3b21ba50da4cbf764861031 + last_write_checksum: sha1:71648edb1b033606ae8d2f2d37f2f1cf00d89733 + pristine_git_object: d45a74d7964be2cbc11fbc1cb43ca1ab6b355c1d docs/models/saml.md: id: 1efeb17f640b last_write_checksum: sha1:6b82f3fa3f1380b3b810bc614b8f0875dc6e9a0b @@ -2702,28 +2870,28 @@ trackedFiles: pristine_git_object: b895638a6298bcc2cd92f385c40e28f13c8bdd7e docs/models/scim.md: id: b9120dfa37fb - last_write_checksum: sha1:224dc233ae957ae3c9735f096533b98fbb503939 - pristine_git_object: 7620dc17820932d3d640ff2f16227372623fd6a4 + last_write_checksum: sha1:bf49efb830478991691acb252d534227e3326f08 + pristine_git_object: dc0ab64339d91fcc37cb5f10e70d74d923c28b7a docs/models/scimdirectory.md: id: 8e0e0d15ebf3 - last_write_checksum: sha1:6f9a94a6f433be107ed3d3b12afc1f8e8d96f586 - pristine_git_object: 7128dd2a327b4a89967c08f3f3379de3d743a952 + last_write_checksum: sha1:4f96f040b5832f43d25229a11607d68e92b3fcbb + pristine_git_object: 5281f368a5147b10741a9d4b63b7ad07b8fd0bb4 docs/models/scimdirectorycustomattributes.md: id: 9fd227cbb7d6 - last_write_checksum: sha1:5c4a7b966ebb7d086b3b5431aaf7902a104f6f07 - pristine_git_object: b88c200dfbfdae71cc30f6761b348db09983716a + last_write_checksum: sha1:44069ec9e6eabd678aa84637f35bc1284e7e0d6c + pristine_git_object: 8e2846659fe47b06fef3440739b1ccbd8751ee67 docs/models/scimdirectorylist.md: id: a49b10f84594 - last_write_checksum: sha1:b986f34613d7c11eb3b135bb16cf4298cf6e201e - pristine_git_object: fbcd6d88ee3916763b6f0dc609a9cd63a3c54f9d + last_write_checksum: sha1:dc19ee1677d386ca696347384c2764191e9910ef + pristine_git_object: a215def1197ebbf08049c7431253da1b58c2e70a docs/models/scimdirectoryobject.md: id: 2f92c5877206 last_write_checksum: sha1:3e4dfc43e9fc3c7e77a46e170cd39103960cac3a pristine_git_object: 3229b1749b098c745747fb2cc6ce067efe2c69a4 docs/models/scimgrouprolemapping.md: id: be906f4ba704 - last_write_checksum: sha1:7b63d3c74afb061afa47bebfbfc28794babeb3ff - pristine_git_object: a345679832a41579c9b92d7a7a999ad1a8c4b72b + last_write_checksum: sha1:0628973a9b32f3ebf39d682db123b31c8a86b4e1 + pristine_git_object: 19bb10c3196f3e3f93667a961665ba7f18fd7faf docs/models/scimgrouprolemappingdeleted.md: id: 076f449417e6 last_write_checksum: sha1:557784d4603c19e6164b981f9ad7a9af810ab2a4 @@ -2820,6 +2988,10 @@ trackedFiles: id: 7b0afce0f5ad last_write_checksum: sha1:acf601712c28d1cd4ae45229eac33feab9fabf20 pristine_git_object: 9dd06fde3a234e51ec5d4a13ad3afd6dc54e484c + docs/models/source.md: + id: 6541ef7b41e7 + last_write_checksum: sha1:4031411310740b8bdde24be2e09d8657480af961 + pristine_git_object: a4da44bc0bcdedc5b27f22c49b24191514b22cb7 docs/models/status.md: id: 959cd204aadf last_write_checksum: sha1:ece7cf30b893ef72816b90181b8b8f9aed71d4ed @@ -2972,6 +3144,14 @@ trackedFiles: id: 684bd19cc120 last_write_checksum: sha1:88298828c4ad4c21cfbada646d544f4f1e285b98 pristine_git_object: f2dff9c7cc2d9a7725948a13862c9ffb23cff6bf + docs/models/updatedirectoryrequest.md: + id: be176fed3bd4 + last_write_checksum: sha1:92a6daa836e2b3d498791ec1d4cdaf3da5f04710 + pristine_git_object: 285e545997cf95316fe639130d0fa475712eb6ee + docs/models/updatedirectoryrequestbody.md: + id: 86d191acc5fa + last_write_checksum: sha1:fa547925eb60ddb2fcc1ccb8219b05eda4904625 + pristine_git_object: 8c2a58e228af7b8821ac2ca2063ea22940cc4a08 docs/models/updatedomainrequest.md: id: 2f1e89f6e793 last_write_checksum: sha1:3286be30e4e25c7fa25b3eeceba3faa136e280a1 @@ -2994,8 +3174,8 @@ trackedFiles: pristine_git_object: 8e6ca0bc333d3edf2fda0a07cafcf42f5e2d3dac docs/models/updateenterpriseconnectioncustomattributes.md: id: ff4a9ba508f8 - last_write_checksum: sha1:fc0800d470f4429c451212dc218b4d9e2bf0ceed - pristine_git_object: 0a3d68efb6a32e7a5cc3e96711c51ca4453be162 + last_write_checksum: sha1:47411fb7cbf38aee5de9366fd6c16da427092605 + pristine_git_object: 0e853690246254808a7dd3d9a9e32871123235f7 docs/models/updateenterpriseconnectionloginhint.md: id: b093f66ac576 last_write_checksum: sha1:969b50fce2b131979ad6a3dc35e965065c0683ae @@ -3030,20 +3210,20 @@ trackedFiles: pristine_git_object: d6b1497a325077b36ca32825d15852d03e56bcf6 docs/models/updateinstanceoauthapplicationsettingsrequestbody.md: id: 3f0d1327b7d0 - last_write_checksum: sha1:43d4a8942c610976cf684a71249a2fcb07fab821 - pristine_git_object: d8bf4abe37f0b8c5d93d3443e524a5ed8ac94064 + last_write_checksum: sha1:ac3f00b4e0ba0a978a68875b49bbcc86c0d179a0 + pristine_git_object: d707cfc3b0f17c3cfbcdaa29c22366193e9899da docs/models/updateinstanceorganizationsettingsrequestbody.md: id: 2f7feba9be1a last_write_checksum: sha1:65cf4fa24922ec829a59eae305060e46328d6093 pristine_git_object: 53d6dfde7a6f0de5ca87d027dbe28bbb1ca15740 docs/models/updateinstanceprotectrequestbody.md: id: 5824de18f982 - last_write_checksum: sha1:5df5fd5e194124647b8b1c6bda7ff1b269f2858b - pristine_git_object: 0fefea3e73dbf9213bdadad23587576baba69131 + last_write_checksum: sha1:fe11b472d4cff7470fe8b6ab2d544b2c3a141a2b + pristine_git_object: 73e4ae4776877ab88db7c8a6f65d3d1d9a4f3467 docs/models/updateinstancerequestbody.md: id: 8e3074a048d3 - last_write_checksum: sha1:85fa817c1d8a0fcb55d9c0009e3de08a8fcea02d - pristine_git_object: 249b5b995cdc45a815601de27e9055b5af3602a4 + last_write_checksum: sha1:047b238d31c6f9033859edf37330f66e1d4b7b7b + pristine_git_object: 66d6ea6f0bca9205b6436b0f8e2177cf96a491af docs/models/updateinstancerestrictionsrequestbody.md: id: fdfe3c55e589 last_write_checksum: sha1:d1cbbeb00213632d9a2dc5d451e02cdd03c2c337 @@ -3074,8 +3254,8 @@ trackedFiles: pristine_git_object: ce63df1651c63262068022409864544dcb0418c9 docs/models/updateoauthapplicationrequestbody.md: id: 13acdc6e22a9 - last_write_checksum: sha1:dbfb248aaad2812c8f0290fdaa4bd368c97f3757 - pristine_git_object: c6fd3917aa4586d14cb3bd29377f4f3cc80d7375 + last_write_checksum: sha1:1ff8eaf5df60dc9e207b187cf09b05634504b22a + pristine_git_object: 4c45513efbd7cd133573b9522de1aa9253073e8d docs/models/updateorganizationdomainrequest.md: id: b6b20e415775 last_write_checksum: sha1:48497502d2d96657373f5c477f106be3603aa024 @@ -3114,8 +3294,8 @@ trackedFiles: pristine_git_object: f305dfba334e8dd765a56ca38191d4649858464c docs/models/updateorganizationrequestbody.md: id: 59034642f120 - last_write_checksum: sha1:c9a9d80bc5ac1c3e6502dea9c942938600a86912 - pristine_git_object: f4d81c09ce0aa804a727bbdc42c66faa19db7252 + last_write_checksum: sha1:b6b7d7db5d524df344957ed835176079411e72d0 + pristine_git_object: 24d15507db3f0cb20a9098901941770056c79c8a docs/models/updateorganizationrolerequest.md: id: 6e51d0883a0c last_write_checksum: sha1:c26813914cef546790781d929df095f6a23752b0 @@ -3166,12 +3346,12 @@ trackedFiles: pristine_git_object: fb8affc1b949ea89dfe20c0c4c6c0332a65c714d docs/models/updatescimdirectoryrequest.md: id: 40090852fb91 - last_write_checksum: sha1:31056da880a01951c8fa740001aa05a2561f73d0 - pristine_git_object: 26038ed949872b842563e972053cf4601e81332a + last_write_checksum: sha1:992cb3861a1394ad160f40aa05a5735b9f96425f + pristine_git_object: e679456e9bd681a756177250c30228494e64b09c docs/models/updatescimdirectoryrequestbody.md: id: 0e179a79c9b5 - last_write_checksum: sha1:d4e0fbb406ce4317d46ee4f452b7ee4479023fc7 - pristine_git_object: 4f8d3dde3c9c34442732dd3e4aa569d457ff1bd9 + last_write_checksum: sha1:3549bad5e255fbd80243eb1a43143b025aa43675 + pristine_git_object: f3b3d601e7a78b487f4e39b4612742af2c4592e1 docs/models/updatesignuprequest.md: id: ef934a29dc73 last_write_checksum: sha1:d7f9c8b15ae8891933891d545fe5a7b91da9d10e @@ -3194,8 +3374,8 @@ trackedFiles: pristine_git_object: d9255b5e342480d1adc6dc08ba08723252cf4ec0 docs/models/updateuserrequestbody.md: id: 42b8f74ba38a - last_write_checksum: sha1:6b8f60b9b7d3949b3d60cdeb299288d3bc532908 - pristine_git_object: e2abc5097a243d968821b7ba658888e8800d0044 + last_write_checksum: sha1:c57f58dab6cfef698873cdf9318e46d1fa6bdb8b + pristine_git_object: 761df79a07f0e7de9e7746adb9ef6249a39d86aa docs/models/uploadoauthapplicationlogofile.md: id: fa299eb49b9c last_write_checksum: sha1:9c8404fcaf30e79a13ac83e7ac6722c75a077b1b @@ -3234,8 +3414,8 @@ trackedFiles: pristine_git_object: ea12511d2ab24faf8ac925f9633c39d8df6696d1 docs/models/user.md: id: 8306f1e41187 - last_write_checksum: sha1:0f8fcd860ef0159a23a0c3696c92ee98c478c443 - pristine_git_object: bd955265409c4d850d1feca4d98ac548cddb2f9d + last_write_checksum: sha1:d49ecd891248b43d21be2f0611a42ea8baf52d36 + pristine_git_object: 4bb37446f320561a204251b3338fdbdf208419ea docs/models/userobject.md: id: 520306a3cd1c last_write_checksum: sha1:4646eb089f3c7296486f34879f7d024f947de1c8 @@ -3754,8 +3934,8 @@ trackedFiles: pristine_git_object: eccdea7874efd15e97b09a19380e069e13811a25 docs/sdks/actortokens/README.md: id: d484142effde - last_write_checksum: sha1:ff26c0f001ce2455931c306d3c8063f5a885bf56 - pristine_git_object: d048d739fb5b2392930eb284eedea95d6efcd9a8 + last_write_checksum: sha1:6e70389abee8de2d2e99c815e7bbe5e9d3449cf6 + pristine_git_object: 8f6773119aa0f92fa32a64d6cbbbea8aadec9c1c docs/sdks/adminportallinktokens/README.md: id: 006cf1d47b1e last_write_checksum: sha1:130e79814a1e9adbdc5d862d83fa39f40a25fee3 @@ -3778,8 +3958,8 @@ trackedFiles: pristine_git_object: 35f3f36a78c00a226b588f68ef192a3375c2c4d2 docs/sdks/billing/README.md: id: dc915331dd9d - last_write_checksum: sha1:38a1202df24dbcf30bc4b502ccf52ebd27836437 - pristine_git_object: 1f48b2923da983666a0798512b65d810309afc98 + last_write_checksum: sha1:419f0b36d5a6a217145707111db0dd5a8fc8c079 + pristine_git_object: 15118fe2d6618bcb96373dfe2e044f5caa7e5faa docs/sdks/blocklistidentifierssdk/README.md: id: 8c5a4397c841 last_write_checksum: sha1:2b250f0eb6ba83fce9a645c9439358b6e6600654 @@ -3788,6 +3968,10 @@ trackedFiles: id: ba883fd0c1cf last_write_checksum: sha1:b0581bd106e26d8a50e0192847765b792be20930 pristine_git_object: ca8c834e59bce7af2d5efd173641c806c22cba5a + docs/sdks/directories/README.md: + id: e8590265548d + last_write_checksum: sha1:d50a5bdec37b128a8ea3754c5e388b1ea7168763 + pristine_git_object: 9189d616258310ee9adf6fbb2d6cec050ae58128 docs/sdks/domainssdk/README.md: id: c7e6539330d0 last_write_checksum: sha1:7fb4960460f2124248acf1a08f384c55d389ee58 @@ -3806,12 +3990,12 @@ trackedFiles: pristine_git_object: 84ea54a2b261f430588d1c78d0397fdc0dc0f3e8 docs/sdks/enterpriseconnectionssdk/README.md: id: f2a1e2452c9d - last_write_checksum: sha1:ade7bb13d821e89ba95d209a9c67c3e65aa36c20 - pristine_git_object: e6fe9f806fe809aa5fa34e261505cb18ba4bd7a5 + last_write_checksum: sha1:6d1880697efb706947cc2520ac4b64fec9fc29bc + pristine_git_object: cbe0ac11439bda587f5fb4683d13da30c065c0c3 docs/sdks/instancesettingssdk/README.md: id: acfc6e2cdd5f - last_write_checksum: sha1:0b5f639b5db0a35a99baa28f9eafeddd40fbb509 - pristine_git_object: b04a9ae69abea77efc01a5225143a885ff0abb35 + last_write_checksum: sha1:8207b13e1b1d5f9b759198208847d72902177535 + pristine_git_object: cc2449c16683ba573728d911918e1da9436d8d7f docs/sdks/invitations/README.md: id: 4f20950f4cbf last_write_checksum: sha1:a01321b496c15f4e32891416c7d21418f69be62d @@ -3842,8 +4026,8 @@ trackedFiles: pristine_git_object: 5f5f87178be1b0a2724177f3c3402f43112b701b docs/sdks/oauthapplicationssdk/README.md: id: d49945f94682 - last_write_checksum: sha1:4a60431c43c10e38fbec8f008864b6a072632856 - pristine_git_object: fb9af2fd07626581f2eeb1b7646f35bbc361028e + last_write_checksum: sha1:0ad52837f51fdae2555b9f9b7bf218c208ea487d + pristine_git_object: d70c38a04e5fb4eaeab8d6c3b17ad5cf31ce24de docs/sdks/organizationdomainssdk/README.md: id: 76a0872c137f last_write_checksum: sha1:3192f245a59c1d091ce221c4e62bf8ba76cd16d3 @@ -3866,8 +4050,8 @@ trackedFiles: pristine_git_object: 327f8cee360b2a99686db8635dce0d5b3cfda973 docs/sdks/organizationssdk/README.md: id: bc6106d94add - last_write_checksum: sha1:af09a4ffffacce370f825b882cb204fd7f0b8beb - pristine_git_object: f949baae3dfcded2bb0487e564031e9532f9ccfb + last_write_checksum: sha1:6c0d568239f5f864b7530280f35554f7cd86fa42 + pristine_git_object: 48707ee15fd9227951d74a5b658a702c253e0067 docs/sdks/phonenumbers/README.md: id: bfed92f30c8c last_write_checksum: sha1:d473ba2e39eb8980ea75c4a46655cfd06bb691e6 @@ -3890,8 +4074,8 @@ trackedFiles: pristine_git_object: b25c5b2f6dcbe4da715ec8cb9556be48c490bd14 docs/sdks/scimdirectories/README.md: id: 78ae8c1a63c0 - last_write_checksum: sha1:41d7c469be513fca3856d63d632cb31277f00823 - pristine_git_object: 5f081e032263039bf5687e844bbe9997ac76ae0f + last_write_checksum: sha1:e652929bab3824410f8a3c167ec0f699913543ac + pristine_git_object: b85c8dd3c26722220404834b80d620c651bbf38d docs/sdks/sessions/README.md: id: 57ad62844f79 last_write_checksum: sha1:aa90f444d0a8b6efe38e390d7987b634eb07ca9a @@ -3914,8 +4098,8 @@ trackedFiles: pristine_git_object: 3b5b06e9e6e00d8c21aa5de0fa5754acec7173d5 docs/sdks/users/README.md: id: 5d80027045fe - last_write_checksum: sha1:7cbd642660455db943e4906ecb420b38d673352a - pristine_git_object: 3839bebe56f7de525b7833a5fa8d1f4470ac0705 + last_write_checksum: sha1:9829766dd6b07743d00f66941e8feabd4011b8a2 + pristine_git_object: 709571a9fbd968fdcd47b0231d5396b9fac7bd3c docs/sdks/waitlistentriessdk/README.md: id: be78acbbb2f4 last_write_checksum: sha1:08794f1399c6b81cf83ef513816222cb5d12f53c @@ -3938,8 +4122,8 @@ trackedFiles: pristine_git_object: 7fd8db13ad9399ab075a5fb70e6da17525ad3ed0 pyproject.toml: id: 5d07e7d72637 - last_write_checksum: sha1:3e547fd95a9c0174b160274d4133d2512641922c - pristine_git_object: 449a85ff8c8e8120a48d05606ee35e25ce7e449e + last_write_checksum: sha1:338eece7dadededffb0dacfa009253091aa863bf + pristine_git_object: 4d72f1e5b29e2a834be96d3aab2df54ec9b76557 scripts/prepare_readme.py: id: e0c5957a6035 last_write_checksum: sha1:419f10ccc385a29136e599315b61a0aa7a1c3e15 @@ -3966,12 +4150,12 @@ trackedFiles: pristine_git_object: ba7b621787df1eb67b8d2eb52c70ab688972267d src/clerk_backend_api/_version.py: id: 9bcb16a88e08 - last_write_checksum: sha1:33062933f45e4c1b492848b5a9343d427ee9ec1c - pristine_git_object: 0531f6681738125fd9fb78aa4b58ab0974ccd428 + last_write_checksum: sha1:fd8382e3ad7d156378c52b2ae23bbe9e10f8ec64 + pristine_git_object: 78efba4c46e9a23c4f9b348620f6721a994e251f src/clerk_backend_api/actortokens.py: id: 3b3f89863233 - last_write_checksum: sha1:5231f0f056ad04d1451b5b0daac771270dae0b31 - pristine_git_object: 61505b20b32730d65ddd5df71ddd002c173641f8 + last_write_checksum: sha1:af788fb5e78e5af29c439ce0b9e3bb42c50c00a6 + pristine_git_object: f19e7a76e13e6de1a6df1d3b6b231bc1da4c452f src/clerk_backend_api/admin_portal_link_tokens.py: id: 049999ccbe0c last_write_checksum: sha1:bd01a71e478823f48f0289bc764e18dc109814bd @@ -3998,8 +4182,8 @@ trackedFiles: pristine_git_object: 067e43e8c86832043551f354136ec84cb662e610 src/clerk_backend_api/billing.py: id: d2a23482b2e9 - last_write_checksum: sha1:0644789a8815dc82ee94116710dfe4bb0963211f - pristine_git_object: 84e8603462c2aa6fd5503846388094549154b0af + last_write_checksum: sha1:0a9cc8bf8a35df6c961fbeb31f65a85196bd4484 + pristine_git_object: df3126f7999df7ec296b53c3350b6457c3675460 src/clerk_backend_api/blocklistidentifiers_sdk.py: id: 49e67487b740 last_write_checksum: sha1:dcc4d48a29d17fbab6cec00671aef0587c7df88e @@ -4008,6 +4192,10 @@ trackedFiles: id: 08e66d5a2bb6 last_write_checksum: sha1:5e32f38c670a3f5562e0acbcac1f4d01184c058f pristine_git_object: 77d504a35267bb3f7d828e2ae452e226f60de42a + src/clerk_backend_api/directories.py: + id: bd46deccd3dc + last_write_checksum: sha1:093a3e90a410009103d3c0cc8eea5924c5719dcc + pristine_git_object: 3e565b247f7bf12bb8c13087e0415cc39821bafd src/clerk_backend_api/domains_sdk.py: id: e49d7bf7ea9c last_write_checksum: sha1:3a9d3cff75d4c293a953a130361f44719d72b058 @@ -4062,8 +4250,8 @@ trackedFiles: pristine_git_object: 489edf6b92702ca84d4b926de4c5690c69172809 src/clerk_backend_api/models/__init__.py: id: 97d9388d85c1 - last_write_checksum: sha1:9d2457a6250b7a25a52e91f2c2c6cf0f2a7385d8 - pristine_git_object: d6fbed373f3f52ac50f6806bfd7a08316f662b36 + last_write_checksum: sha1:739a42db37c3e068c1d1ece8258c05b887a79775 + pristine_git_object: 345d927ae070bb91f7b4a15a3de1f83336c9276f src/clerk_backend_api/models/_verificationresponse.py: id: 60d0443bfa2c last_write_checksum: sha1:fe16527d8fc007a482bfc55e6f3ccd67f407d7bf @@ -4100,6 +4288,14 @@ trackedFiles: id: 15fed620f318 last_write_checksum: sha1:9ab952bdfc6be83c88cef2880d56f37956ceccd9 pristine_git_object: b30831efa6f0c7f08d4ea14df40f1697cbbfa772 + src/clerk_backend_api/models/applybillingsubscriptionitemdiscountop.py: + id: 42fcf3048519 + last_write_checksum: sha1:e2e1123547e12a3f3719e2637c08d3c42042a6d6 + pristine_git_object: 5c01ab90fa8323adfc092b0b0990b24f61207528 + src/clerk_backend_api/models/applycommercediscountrequest.py: + id: f2ebea625564 + last_write_checksum: sha1:4d96e6e10831ef713df1f9f2790ab74e6b2805b4 + pristine_git_object: 9fb4d4d5bc5fa72fc36146429302e779606ca298 src/clerk_backend_api/models/assignpermissiontoorganizationroleop.py: id: 13b0d15fe2f7 last_write_checksum: sha1:b8518e79f35e9206d341360a617501f89bc4abb9 @@ -4128,6 +4324,14 @@ trackedFiles: id: ea675089f24e last_write_checksum: sha1:064cbdb47e72184e486787047a051ffbdd0af2f2 pristine_git_object: a0cfa52bcf1889af4e30cdad89189ee64a1fbfcb + src/clerk_backend_api/models/biometriccredential.py: + id: 2918a80ad856 + last_write_checksum: sha1:f6afc59ce61db22af1839cf6f22bb4597ccc162a + pristine_git_object: 62d218ba5ec1f6d7ea25d5fac6a92660dd36b778 + src/clerk_backend_api/models/biometriccredential_list.py: + id: b50cddf53114 + last_write_checksum: sha1:3e07fc1326b32db726d362a8738882de5b618266 + pristine_git_object: 0298f8e165b4ec4de864ff22595d4af5b3e0ad8d src/clerk_backend_api/models/blocklistidentifier.py: id: 2bc53a82c186 last_write_checksum: sha1:fe56a4f9ed5ddd62c3e4f9396f8ebe567005071c @@ -4172,6 +4376,10 @@ trackedFiles: id: 14d5cfc6c25b last_write_checksum: sha1:5548417681f8aa333fe36f76cae774fef550591c pristine_git_object: 5d767050ce2aeac717e8fa9aec776e399185bc37 + src/clerk_backend_api/models/commercediscountredemptionresponse.py: + id: 74c13798faf7 + last_write_checksum: sha1:351a5621c5b467e738a127a68bbf7e7842c4874b + pristine_git_object: aafd2c24a77d3f490d442dd4733957bb1309080e src/clerk_backend_api/models/commercemoneyresponse.py: id: a252a54968d5 last_write_checksum: sha1:2e69dba9bb15c716e7984b1677f4093ad4d08daa @@ -4270,8 +4478,8 @@ trackedFiles: pristine_git_object: 598e69700a44579b881582584b428fe8efcc58a8 src/clerk_backend_api/models/createbillingpricerequest.py: id: b97e499e0829 - last_write_checksum: sha1:f3c3df503ed3a1aa132a4407fcef2ab5de259d1e - pristine_git_object: 84a19d0ee0b7d18334d81da3cce3a6b3eb865a54 + last_write_checksum: sha1:a5c8dc186b698a9c614a7a58afde69dd4d33cf8f + pristine_git_object: 94be72812e0f6f68b2b0748707d4abc2a45cc99c src/clerk_backend_api/models/createbillingpricetransitionop.py: id: b2b936b90df7 last_write_checksum: sha1:6a158d92eb5164cb73cf31b223d2d1a68f0a715f @@ -4288,14 +4496,22 @@ trackedFiles: id: 5b8b270c6021 last_write_checksum: sha1:7b1d09608da4ebcdc46e1323f8dbfac1d50d6b1b pristine_git_object: 8d6b314cd9ee2532a8ced05f4a07587eb9773515 + src/clerk_backend_api/models/createdirectorygrouprolemappingop.py: + id: de865942d186 + last_write_checksum: sha1:5694dacc3d40809c7b24e85fc853bb91fe9fc4ca + pristine_git_object: 33e6b85f2cd658b0fa5081007b648305570353c7 + src/clerk_backend_api/models/createdirectoryop.py: + id: 58da0e27c76c + last_write_checksum: sha1:2ac3d6364a0f15d92b3213a9e77324a470867fcb + pristine_git_object: bc2afd06bfb4664b42e905d4718c1a1879e73270 src/clerk_backend_api/models/createemailaddressop.py: id: 02f3665954c0 last_write_checksum: sha1:7f6b78c567aa6874ceb07fead0146a233f152f5e pristine_git_object: d4faf340e35093c31e319b4b54f013da095aa00a src/clerk_backend_api/models/createenterpriseconnectionop.py: id: b5cdd9bc15ad - last_write_checksum: sha1:99e0c8572649876517ff677b8566a1f9947cb794 - pristine_git_object: ed7e218278de3daeb8a02c5e28b0b2dd0debfaac + last_write_checksum: sha1:512a50db62274446badef390800ffdec4844d70b + pristine_git_object: 8aad27acc9344f60b80910fc52295c839abf0187 src/clerk_backend_api/models/createenterpriseconnectiontestrunop.py: id: acb0603e8f1d last_write_checksum: sha1:6e1fbe7f4f3c1139a7ec5db24bb882d47e3cbce1 @@ -4322,8 +4538,8 @@ trackedFiles: pristine_git_object: 48c4cf13f58f6b018f3de395211b4b4098896186 src/clerk_backend_api/models/createoauthapplicationop.py: id: 7793e4c722dc - last_write_checksum: sha1:b9e32c428a417782141ec02da7d61553653ff2aa - pristine_git_object: ecde431dd1e9d5ea8585905d15d8f8b8fe1704f2 + last_write_checksum: sha1:85ca7df2ef90d7a43908a5c70259d48aac744671 + pristine_git_object: faad9f83aac410e5d1f8396ac1f30cfbae91cb8a src/clerk_backend_api/models/createorganizationdomainop.py: id: 5a6ae0dba9f8 last_write_checksum: sha1:6602bd3044b0881b0d0ed73f4a421cb3317c89d0 @@ -4370,12 +4586,12 @@ trackedFiles: pristine_git_object: fbe54905145fac37ffb93746c144d7169cc58e75 src/clerk_backend_api/models/createscimdirectoryop.py: id: 55fa69acf119 - last_write_checksum: sha1:32dd8b65c3abcfac84007c88f3beadbfb373055b - pristine_git_object: 1aaba828e3cb37c2cffc376ba84b9d15a037e2a4 + last_write_checksum: sha1:9d551d4901051a987763a9c03c93e9cf4eea61c7 + pristine_git_object: c4eb7fb50f00c4b31b5d74a1ac10aa507b8546af src/clerk_backend_api/models/createscimgrouprolemappingop.py: id: e470cf129592 - last_write_checksum: sha1:1ace8b809a6972819caddfa7b56461b53c6cba4b - pristine_git_object: e09fd3cdce31a2504ce127667bd4ed60fb02a3ab + last_write_checksum: sha1:a13ac3509f3aa71cc818e3494c18dac4003ab3ce + pristine_git_object: 52c2c8f8ac54185fb5eec1f352bd57d2e1adff47 src/clerk_backend_api/models/createsessionop.py: id: 0e1e77977e4a last_write_checksum: sha1:15a73bd220b8bc790cc8c07ac2e05fbeaade792b @@ -4394,8 +4610,8 @@ trackedFiles: pristine_git_object: 6d035e8c6e390b86aab2cf410a1c131b4d9b4a44 src/clerk_backend_api/models/createuserop.py: id: bacf02afe019 - last_write_checksum: sha1:cd0471b8d7fe63428000f2438c6bea858eebbe54 - pristine_git_object: 2f1e91c47e32985b1cb005919068f6406ef875b2 + last_write_checksum: sha1:75689f040dcad0c0200b1176862996f52c6de2d2 + pristine_git_object: 22c76bf3a58aeef2a4c7f2c82c66da62d18591f2 src/clerk_backend_api/models/createwaitlistentryop.py: id: 5fc8451ee608 last_write_checksum: sha1:9c93e68fffa5039690697f323c3c50422036c6be @@ -4416,6 +4632,14 @@ trackedFiles: id: 39d8cc22dddb last_write_checksum: sha1:c8a30974fd0eab88e1b41cbbeae972ff79d90fb1 pristine_git_object: 2138876235da0f11f37c715ecfbd64cb7896da61 + src/clerk_backend_api/models/deletedirectorygrouprolemappingop.py: + id: e9c07e3cabfd + last_write_checksum: sha1:0fb7bac7312d144b9543e00d232f5742281181de + pristine_git_object: 58c53139c199e3f9028dea65ee876682635d2103 + src/clerk_backend_api/models/deletedirectoryop.py: + id: 2f65abe80e54 + last_write_checksum: sha1:497273fe2fcd59dff567db59abd6111c1899557a + pristine_git_object: 505fd40bb43cff4c3ad4f8032c8136cc593b2a77 src/clerk_backend_api/models/deletedobject.py: id: 90b1fa37a045 last_write_checksum: sha1:5da771c71b6ed12d71374aa7b0867910573a9945 @@ -4490,12 +4714,12 @@ trackedFiles: pristine_git_object: 3e5cfb25e270dde4e82a59ac4f98b8abfd6de94c src/clerk_backend_api/models/deletescimdirectoryop.py: id: b0d258e43d41 - last_write_checksum: sha1:ff4f7b1cd2b3cdd4f218b3e08fe51e8801df498d - pristine_git_object: cf4ffa57507f711da9773e18d78e0b58c5b03ba6 + last_write_checksum: sha1:23085646099ede9a1e5502de4ce81ecf3b0715b9 + pristine_git_object: 494c01587150984e580df3d815515b85700be803 src/clerk_backend_api/models/deletescimgrouprolemappingop.py: id: a5e9eacfff37 - last_write_checksum: sha1:4b3c7c448af660ba5b9588797da4ce98a359d98c - pristine_git_object: e36932acfe7b2bf5858d53b35f38a6e737ed2e4a + last_write_checksum: sha1:bda036e3457d711acdfc8a9816c74e3b29de3d0c + pristine_git_object: c5b91dffb371f130f5f8dc093ff568f01eba5b17 src/clerk_backend_api/models/deletetotpop.py: id: 92ed611f8ded last_write_checksum: sha1:05159ad49569dd49890168766e34f1cb81c96008 @@ -4512,14 +4736,38 @@ trackedFiles: id: 25fd8d0c2158 last_write_checksum: sha1:2d01b8a892ead4e6bf28d6c6675fe71faf9de01a pristine_git_object: cbf0b3e45f9332bcdad6632d947355dea7601bf0 + src/clerk_backend_api/models/directory.py: + id: ae8910bcf5b4 + last_write_checksum: sha1:bf093291fafa2f2bba0a40c88161434220723f3b + pristine_git_object: a10fa2e2b8c330f1523cb7825cfedfe8daae24d8 + src/clerk_backend_api/models/directory_list.py: + id: 64473b3df7c3 + last_write_checksum: sha1:1582ae61c52400faf1a06f72684b3718010d6bc7 + pristine_git_object: f5a38c1a46621e108e6a4e593bbf9fc7d6201550 + src/clerk_backend_api/models/directorygrouprolemapping.py: + id: 3b50491fc173 + last_write_checksum: sha1:e77764305d84e93e132341f298ed96924841f8b0 + pristine_git_object: bde248ab4213c22bd58fda1589c9735fa6efa263 + src/clerk_backend_api/models/directorygrouprolemapping_deleted.py: + id: f2150866e17a + last_write_checksum: sha1:c31ce0937bec23746b4598a0eda777ebe41f8b9e + pristine_git_object: b6738406c6b8efbb54e5cd1d39aa7d753cba7fd0 + src/clerk_backend_api/models/directorygrouprolemapping_list.py: + id: 027b8271fd20 + last_write_checksum: sha1:10d3d8b31aba6a036aa85add0581308854a60629 + pristine_git_object: ee71131432e0bfbf9b61f6fcd95925b62c964722 src/clerk_backend_api/models/disablemfaop.py: id: ed94d0f68953 last_write_checksum: sha1:b5cf9e6a7a9cf82bf8689223af9e2fa47cf6549c pristine_git_object: 6cd29d9a285190feb32e652d9cb3b1c728d323a8 + src/clerk_backend_api/models/dnstarget.py: + id: 06ce158bd174 + last_write_checksum: sha1:ef31a888375477fe4e68c1bc42b2b44e603ec60a + pristine_git_object: 5b44d71d9fee7cdb1a4104c2fc78837fed41b38f src/clerk_backend_api/models/domain.py: id: 733ede72ac6c - last_write_checksum: sha1:0e8b83e4020bc27a8c14c93c03f21e4ece64d585 - pristine_git_object: c297fb6ca42e0a491d90286519199d685a87347a + last_write_checksum: sha1:f0c641c4c50bf4573cfc54860aee057c512e9e4b + pristine_git_object: 6bec7b46e510596a4a5302eb493835475963c922 src/clerk_backend_api/models/domains.py: id: 795c60265a74 last_write_checksum: sha1:119a83d8f328e5f686682f78705aedbd001e3973 @@ -4534,8 +4782,8 @@ trackedFiles: pristine_git_object: 00702cd8522c7a0f563b84a6eb863745598636bf src/clerk_backend_api/models/enterpriseconnection.py: id: 0045faf0e373 - last_write_checksum: sha1:7cc90e883a889a3036f3488d55d96832a7a78611 - pristine_git_object: 20e62efc538a9955fc4e07265f36227017fcbf6c + last_write_checksum: sha1:a399be5db3e92746ebe55eca50e274f115d3ef24 + pristine_git_object: ee5e57ecad5da6e5205c58950d30637742f83bdc src/clerk_backend_api/models/enterpriseconnections.py: id: 010ac19b1513 last_write_checksum: sha1:4312df3471b4d138a5bc29c049b5a81015b23b3c @@ -4616,6 +4864,10 @@ trackedFiles: id: 1c815aafbef4 last_write_checksum: sha1:43bdf5f3672bdab1f8a8fcce082d22d9659367ff pristine_git_object: 0541196bcb7274007355c96a9da8798c16cc4390 + src/clerk_backend_api/models/getdirectoryop.py: + id: 6042be734e5e + last_write_checksum: sha1:247944499a54f6f20b95a9d2896b37459839d4c1 + pristine_git_object: 71ad4c6a95d0cf694e115488c2461abf5313f166 src/clerk_backend_api/models/getemailaddressop.py: id: 5643cd0c77d6 last_write_checksum: sha1:0142c1c61e447ed1ed80cc5ac5c818ff054e563f @@ -4694,8 +4946,8 @@ trackedFiles: pristine_git_object: 6453dd527a582d4511dac931af76cae1ceb52b83 src/clerk_backend_api/models/getscimdirectoryop.py: id: c23b659c36cc - last_write_checksum: sha1:f3c4f551697a596ba03773e9cb46a7cfead36389 - pristine_git_object: a0ffd4b40670772819bb7100fc31f29901d6665a + last_write_checksum: sha1:383723663bd036c370fd4cab7bec2edeeb140821 + pristine_git_object: 7deabff4300be49061b16382ca6cefeacf313d62 src/clerk_backend_api/models/getsessionlistop.py: id: a8e161eebd23 last_write_checksum: sha1:6e713f4c224f8cc57888f63311eff9000063c44d @@ -4726,8 +4978,8 @@ trackedFiles: pristine_git_object: 638943c11b73d6256eb3d68156c656b13f3cf9e4 src/clerk_backend_api/models/getuserlistop.py: id: af0fef8affd9 - last_write_checksum: sha1:45027f3da2aa7c0ed1e6e5798ceb9cd6c7bf5460 - pristine_git_object: 2b0d041562ae48eeedf43ffca36bcd795b183e9e + last_write_checksum: sha1:c2051f5790033faecec9272f8b138a5f7b7b5809 + pristine_git_object: 9e1fe98721f34f62e4765fefcaee975d3aa95737 src/clerk_backend_api/models/getuserop.py: id: 1c2e85a07888 last_write_checksum: sha1:1b2e0ea568ee02fb2d04e9c53cbf6f1134b11737 @@ -4742,8 +4994,8 @@ trackedFiles: pristine_git_object: 97b8c1cf2914963db67be95732598224a89fc170 src/clerk_backend_api/models/instance.py: id: 05a213628ace - last_write_checksum: sha1:4a673a41ee49e74cc47fea50426739cfb655727b - pristine_git_object: 4da77064c31cf6eb12b18baf63509b789da909c7 + last_write_checksum: sha1:e99c0e03f6c8fb97d77fcf868a8b86a33121a451 + pristine_git_object: 7b7b1a08cbb789b814580390a6c289354bffa9b3 src/clerk_backend_api/models/instancecommunication.py: id: 3ab9a692849b last_write_checksum: sha1:b9342c085272b3d107a2a54f02256839dd7c940e @@ -4754,16 +5006,16 @@ trackedFiles: pristine_git_object: 550fe3d2d383186929b9a20ff1cc64e30b547b44 src/clerk_backend_api/models/instanceprotect.py: id: 64baaf6e2fd8 - last_write_checksum: sha1:d8a7f76b0875cdd2705172530cbeb9df975617df - pristine_git_object: 35532cca7f07708db1c672b5dde8ca846578e4a8 + last_write_checksum: sha1:feae4589a4d2ec8f37a54f33f6b318481d219b3f + pristine_git_object: 383388c492b778f2ebe99e4b4229e8ac1f0b5143 src/clerk_backend_api/models/instancerestrictions.py: id: 80b29b304a9b last_write_checksum: sha1:8f787fbfb1aabac1eed513c134ac8fbc05befba3 pristine_git_object: ddd0ac692efc93c02a2a8832223f67d66c341721 src/clerk_backend_api/models/instancesettings.py: id: 813025971cc0 - last_write_checksum: sha1:3840a7b71d2b6b024a2d2d1aa83dc11c1df2f5f4 - pristine_git_object: c0c8e8fcc709a24793bba0ef0bca6b01d316b135 + last_write_checksum: sha1:992341d527bf87109a77845e280b7c7f9ffac3d5 + pristine_git_object: 293dcf8d3c4b5d2d7a2549b1fd0ddae6efc97b16 src/clerk_backend_api/models/invitation.py: id: b1c4904661ef last_write_checksum: sha1:f29f230562510fd420155ed245cba7637b577953 @@ -4792,6 +5044,14 @@ trackedFiles: id: 44ca21651421 last_write_checksum: sha1:4cec79f95de73339984720d7dbbd2e8016dfbfff pristine_git_object: 6cd1131293610a59922aadc98e3e92f4e3ff80fc + src/clerk_backend_api/models/listdirectoriesop.py: + id: a718c25a0ef9 + last_write_checksum: sha1:c3e3015ee955e519b0d54ebdfd34b7c572c323a1 + pristine_git_object: 65d74f736d9658d9a65445af7d55720815cff941 + src/clerk_backend_api/models/listdirectorygrouprolemappingsop.py: + id: f1a666d3fc49 + last_write_checksum: sha1:44e67d90ef065a4e67540a2e6b27880886524800 + pristine_git_object: c0296894b201c5ea00d23e82f0be43159b889659 src/clerk_backend_api/models/listenterpriseconnectionsop.py: id: 27184694a431 last_write_checksum: sha1:c988f817cea0f68b24cd19606c4331485157f7a1 @@ -4818,8 +5078,8 @@ trackedFiles: pristine_git_object: 0593f8aa03426823aea3f6257e36ae5fe6c5f123 src/clerk_backend_api/models/listoauthapplicationsop.py: id: aed7918b5db5 - last_write_checksum: sha1:911223bbf2b5b1fa794093d306a52fbf6884edd8 - pristine_git_object: 2e0a53d0dbba346dbe198c3b62aa991229ebcfef + last_write_checksum: sha1:86f4d9340271e32a2247e0fe45a4f8ed375f7815 + pristine_git_object: 324fdd2db25b0a2a96e53cc0c22336b2b512487f src/clerk_backend_api/models/listorganizationdomainsop.py: id: 189f8d296b8c last_write_checksum: sha1:17e5d7fbf18d48b0129718ce726d51e933c4f941 @@ -4866,8 +5126,12 @@ trackedFiles: pristine_git_object: b244e4a46e46ea2e744b7f803cb87f75f2e6d0d1 src/clerk_backend_api/models/listscimgrouprolemappingsop.py: id: 1eecabe487de - last_write_checksum: sha1:9280acd68510b40e237973338658f1480aff4088 - pristine_git_object: 333ad3830dc7c02ce18ab12cc4036caae63deade + last_write_checksum: sha1:138e6ba73c20dd6758383cb6fb1501659e9ca042 + pristine_git_object: 629cd47ebef7dbdee4150133b723661724e3e545 + src/clerk_backend_api/models/listuserbiometriccredentialsop.py: + id: 4e6e4252fc55 + last_write_checksum: sha1:0b157d1841bddf0b01e1c6a03959247a973d8ac6 + pristine_git_object: b9e232667e3f9d9bf226bd580b14c77313517e5c src/clerk_backend_api/models/listusertrusteddevicesop.py: id: 8637b4e598a5 last_write_checksum: sha1:23e97203594f0d66e73017305ffaaab846c390ec @@ -4926,24 +5190,24 @@ trackedFiles: pristine_git_object: 1a9801cc80011710061d660016a0a44aa7d05e43 src/clerk_backend_api/models/oauthapplication.py: id: b6e3060aaf0e - last_write_checksum: sha1:4d4d139e6faad481ea626c3a13e0548ea2d4038c - pristine_git_object: c899f81491887a39c8fbd5577fbd6b7e8e3118f3 + last_write_checksum: sha1:013573114edcb9e83af5f18219a90d68a179acb4 + pristine_git_object: caba826b7efa2c39be43d3e27759d459079890e5 src/clerk_backend_api/models/oauthapplications.py: id: 4c7ac174fede last_write_checksum: sha1:01c2a0f4dd55cf4f559906d17c750ca4dccd61e8 pristine_git_object: 879adb3b3327e233c4d252e3f0e8650bd55e4f45 src/clerk_backend_api/models/oauthapplicationsettings.py: id: f775c0a6f413 - last_write_checksum: sha1:d714e1177dc912b61efe71a6d0d304e91d1feb3d - pristine_git_object: 89c03b7d720abcaf2cb80ce695f48424061219d9 + last_write_checksum: sha1:007bc1686b1b7227be8830f8df97ecdc63a97ead + pristine_git_object: 253532c7257bc9b7547a4deeb72dc99c273a698d src/clerk_backend_api/models/oauthapplicationwithsecret.py: id: 924cea7b78d6 - last_write_checksum: sha1:8967e378b5b9caf038e2bd00716de522033658ff - pristine_git_object: 5d7c9a28982f3fe381174e6c285e318bace2431f + last_write_checksum: sha1:8caecbfacccf6e4794b2594956ac9779291de40d + pristine_git_object: 64522e2a8ef996900538c8e203f44f9d78e18c99 src/clerk_backend_api/models/organization.py: id: 80ef72d7e4bf - last_write_checksum: sha1:59a3ab2bf1d70c595830fa0ef807fc85c6f92dea - pristine_git_object: e14ddfc94b626a51175a05dfa9cde4d473ff185d + last_write_checksum: sha1:6987b6834edd9150c681db3d51838b410fbb588d + pristine_git_object: e8d4d69eb13c6e0766ccd284d32b5107dcb14d50 src/clerk_backend_api/models/organizationdomain.py: id: 627b7a1a5e5a last_write_checksum: sha1:2271e3ee265687becf215a4cb38bb10c90e610f6 @@ -4978,8 +5242,8 @@ trackedFiles: pristine_git_object: a79eab9b816a068a2a15ca6b562c4117c7b30654 src/clerk_backend_api/models/organizationmembership.py: id: b88b3dca6da2 - last_write_checksum: sha1:89ca102492a514bcf45e043419ee850e805881b6 - pristine_git_object: fb12557339f100c3841c6ecebfadfda9c28b3237 + last_write_checksum: sha1:19ac710960dc5f4649dac7aa86cd4159eea6ee70 + pristine_git_object: 54b2b53015cf363a6159a23d5e3392daf861f1da src/clerk_backend_api/models/organizationmembershippublicuserdata.py: id: f5370bc52443 last_write_checksum: sha1:aeb053120bfaff11c3dd73e253f35ae7177cd3b6 @@ -4998,8 +5262,8 @@ trackedFiles: pristine_git_object: f8fbfc2430d73f9f2969193c24734e965390e151 src/clerk_backend_api/models/organizationwithlogo.py: id: 39e7afc96dd0 - last_write_checksum: sha1:d51efaa9884e2d989969c70d0b909edfac69b7e5 - pristine_git_object: 4d4070708d1d82895961bc1f16797eb646e69cc1 + last_write_checksum: sha1:93acf11a69b9633d853c22d858da9a50e6b3b744 + pristine_git_object: 51d855db34190b47cf34506225cb79d03352f0c4 src/clerk_backend_api/models/paginatedbillingpaymentattemptresponse.py: id: a30c95e05339 last_write_checksum: sha1:7b50424f68eb4beeabe7b551697b53ab1e60c51b @@ -5068,6 +5332,10 @@ trackedFiles: id: 5125249f4a11 last_write_checksum: sha1:9ca38e7bfbd5fdf4b007becd426268cdee883444 pristine_git_object: af85daf9c94902ae69f739eec1ac54260823b7f9 + src/clerk_backend_api/models/removebillingsubscriptionitemdiscountop.py: + id: bb0578ad17a6 + last_write_checksum: sha1:ddf086a836ac2737042024883343af43a5bddcb9 + pristine_git_object: 3c1b85bda17cfddda68c035850c5878550445add src/clerk_backend_api/models/removepermissionfromorganizationroleop.py: id: 6c86531412ec last_write_checksum: sha1:45a237fde48c0c313429957aa8e23c3eb9735356 @@ -5076,6 +5344,10 @@ trackedFiles: id: 06b0c26dd1ec last_write_checksum: sha1:623d5bae31f314f739f0f07423e795558b7d4226 pristine_git_object: 93dd0574347443ac435eab8cd8a6915ac76014ed + src/clerk_backend_api/models/replacedirectorygrouprolemappingsop.py: + id: 6d81ee52fe87 + last_write_checksum: sha1:8eec7e385d1e14a7a7fbc7ef2d1f7bf8ff300348 + pristine_git_object: 0161623ac177d321fe63a6bf92cacbbbb7f25774 src/clerk_backend_api/models/replaceorganizationmetadataop.py: id: 252f8ebd1c2c last_write_checksum: sha1:0e9620bc08613a004610c6b01772b06f57da91bf @@ -5090,8 +5362,8 @@ trackedFiles: pristine_git_object: 8da7e8c425f63309be5014cbaacc5881560cb9c4 src/clerk_backend_api/models/replacescimgrouprolemappingsop.py: id: 80d14eabebf0 - last_write_checksum: sha1:da299f9dc75f3ce954579d59d37df159f43ab8d2 - pristine_git_object: 391d820d378010f94a0fd9613976001ae8d8325d + last_write_checksum: sha1:b086b695b119affea8e1c74a31d8f3dd0acf7fe0 + pristine_git_object: 8bc063d19389cbb68f3338be04079fb53fda412c src/clerk_backend_api/models/replaceuseremailaddressop.py: id: bf3fa5c775a0 last_write_checksum: sha1:47c999bc94a22ff042ca47e46f65838b69c85bb5 @@ -5152,6 +5424,10 @@ trackedFiles: id: 86693d1849e4 last_write_checksum: sha1:d4064e52c30d092ab815d1fa099d95fb799796d3 pristine_git_object: 4aeb54aa92e9facc7689e9d18bf03f054ecf2728 + src/clerk_backend_api/models/revokeuserbiometriccredentialop.py: + id: bfeecdc7dfca + last_write_checksum: sha1:d25ad1fc13d00238f7dba4545de854fed4fa738f + pristine_git_object: f16ebeed4daec2d6a6d715a49f58e75cf9b4c89e src/clerk_backend_api/models/revokeusertrusteddeviceop.py: id: 2713a3bfeaca last_write_checksum: sha1:1d373235fe283288ac11060a6f305f138c462abb @@ -5176,6 +5452,10 @@ trackedFiles: id: c04be7307e3c last_write_checksum: sha1:d26438ef019c6e4645e088ffdd2ccb7120aecfa8 pristine_git_object: dfaba990eb269fcfce8eb24415813135b6d3ab26 + src/clerk_backend_api/models/rotatedirectoryapikeyop.py: + id: 5d520247e035 + last_write_checksum: sha1:0916e228c5a103fe6bc6ff4b371bb69af3e22d4e + pristine_git_object: fe873644dc1dfd7410cf84ffaecd967b98a32a61 src/clerk_backend_api/models/rotatemachinesecretkeyop.py: id: f8150a148010 last_write_checksum: sha1:6c9612fc62d222f91318d900de3e3cada555c848 @@ -5186,8 +5466,8 @@ trackedFiles: pristine_git_object: 4c0586ea03498ce190ecc66ae7e25405f4878633 src/clerk_backend_api/models/rotatescimdirectoryapikeyop.py: id: eb7170135bf5 - last_write_checksum: sha1:127571ecebfe03b6aaceca26c5d8627a7e6d544f - pristine_git_object: df89bba469f8d6e5d7945db9a6091b468203cf28 + last_write_checksum: sha1:0462281fb3bb0c87938a18cb9463face72f4ce49 + pristine_git_object: d58a457403aff4c09f9d59cf83deb42940184638 src/clerk_backend_api/models/samlaccount.py: id: 49087d16fc62 last_write_checksum: sha1:da0fbcac07fea799716c928c3fe0e2433cec706a @@ -5210,16 +5490,16 @@ trackedFiles: pristine_git_object: 76c451540cf95778c574d0dbd574aa36a77351e8 src/clerk_backend_api/models/scimdirectory.py: id: 0750140187b7 - last_write_checksum: sha1:ffc29dc9c7bf94a98a6959c558f20b2ea10dd4a9 - pristine_git_object: c029e660138f7024f11f76ee84113d039d570c85 + last_write_checksum: sha1:9244ec4fbeb51f8eed34e34f04fd754139704188 + pristine_git_object: e90fca0c6edd42ac4fe47728fc6a8c4fd9323b5b src/clerk_backend_api/models/scimdirectory_list.py: id: c0f465b4ae66 - last_write_checksum: sha1:0f135de8159144a0c07c410f45156d3f4c39f459 - pristine_git_object: 93dd60311ff754fa62fd1653f4ae17e11abed9f5 + last_write_checksum: sha1:749ff4c00efca81984a674787aeeadfba8f8018e + pristine_git_object: 36e76de83999b540d815b95a02e83f779aa6ee3a src/clerk_backend_api/models/scimgrouprolemapping.py: id: e6a2bae1dae9 - last_write_checksum: sha1:2a76776e3cc9b2897bf90a201f8856af6f890fe1 - pristine_git_object: 3093d43d452731db71e106c9927bb26128dd5132 + last_write_checksum: sha1:2e609fca8f308e0deb64c800b8abd58970ee2c70 + pristine_git_object: 8966fa9deb503b08f60c085d7871b24d62739b09 src/clerk_backend_api/models/scimgrouprolemapping_deleted.py: id: 4ad1122104b9 last_write_checksum: sha1:8f04a624e0bba1ba129af36ef03d18d8add90670 @@ -5324,6 +5604,10 @@ trackedFiles: id: 0806fcaf3c52 last_write_checksum: sha1:9e5659431bd5868a19d122ba4bd18ddcebb3aff8 pristine_git_object: 49ec65b5c29a6943a4b75be4056b92687e4aa142 + src/clerk_backend_api/models/updatedirectoryop.py: + id: 02030985409a + last_write_checksum: sha1:a2dcf69d2d0e112c84820eacdc202ae09148e840 + pristine_git_object: 2cc9617ff458b5d5a5107583c3427362fd5a4378 src/clerk_backend_api/models/updatedomainop.py: id: e48432b285d4 last_write_checksum: sha1:4787fbe0814e412611a7999786c35cfaaad5cff2 @@ -5334,8 +5618,8 @@ trackedFiles: pristine_git_object: 487bfb86f8bdd2171a333acf1ce1e6eaf61438eb src/clerk_backend_api/models/updateenterpriseconnectionop.py: id: 8838cf277ea7 - last_write_checksum: sha1:d74066c9ca96baffcf9d0885a713b3a77888cc81 - pristine_git_object: 00d43d632637c4fb6d98765e4d36b90c164713ca + last_write_checksum: sha1:d25fa7ac21e8b9855184d29c224d33e67abcb008 + pristine_git_object: aa90b1e5015233226c4cf3f6fa1a32866776b493 src/clerk_backend_api/models/updateinstanceauthconfigop.py: id: e4d1c554c8a8 last_write_checksum: sha1:0a7ed65be461eff84e481fdd61f652c4214dd001 @@ -5346,20 +5630,20 @@ trackedFiles: pristine_git_object: 57118589eb930bc07265e258cb8318cacd10c034 src/clerk_backend_api/models/updateinstanceoauthapplicationsettingsop.py: id: 78731c1e424a - last_write_checksum: sha1:2a5043de7f4d1381d99431b4d02ed9bd0c479500 - pristine_git_object: 88c2cb544734368aad4bb4f952871c880b634f5f + last_write_checksum: sha1:6814b67ac698758182d467957d22520294518ac6 + pristine_git_object: 7788052839e51a63cc7d696596ef08d9d424a859 src/clerk_backend_api/models/updateinstanceop.py: id: 40af0297ff55 - last_write_checksum: sha1:57dd142c407ce05fdfdb4fb319e4ec8a4b03a999 - pristine_git_object: 03232421958dbd651e1dc5f2140e185fbf72373b + last_write_checksum: sha1:6c3055b43a43ea3a8be737dd4510f3c6d4f831ea + pristine_git_object: 23e3bbfb538469eff3c65969109f0ae083d5fd9d src/clerk_backend_api/models/updateinstanceorganizationsettingsop.py: id: cfc65d736c99 last_write_checksum: sha1:7e8ee605fd857a323a481bd04389e3ab2df164df pristine_git_object: d91b2d616b7c03d0e1d5ddb66417a57c7ebe648d src/clerk_backend_api/models/updateinstanceprotectop.py: id: 7e1b719af3db - last_write_checksum: sha1:f2371b29a77b82d0f1e413d005e920ba6518aac3 - pristine_git_object: 3ab7addf4dc623ee0709d04d42702f2128e697ac + last_write_checksum: sha1:d32d62281b8e0fa220f8bb4a3f2c1f8a446183e0 + pristine_git_object: a4da73fbcbb80e564ebcdb68f04a6309e40e2ff9 src/clerk_backend_api/models/updateinstancerestrictionsop.py: id: d8dfacb6c7ac last_write_checksum: sha1:cc08142e4f26a0e0fc336a516650a4743a0df05f @@ -5374,8 +5658,8 @@ trackedFiles: pristine_git_object: b1b964b0890a904b2273320ac063996204450c3e src/clerk_backend_api/models/updateoauthapplicationop.py: id: 51fa6041548d - last_write_checksum: sha1:99ed0ad7245d81b52a1c8d691b59d44ba06b91be - pristine_git_object: 4775edcdb8659a808f1f54bd1bd334c91eb7b195 + last_write_checksum: sha1:fec1b3fe69abac2b0dd86fe95f5de955c369e400 + pristine_git_object: 3d3d25adcc34a50d8c06cb6577d798501b499b84 src/clerk_backend_api/models/updateorganizationdomainop.py: id: f821cc2481cf last_write_checksum: sha1:e8c1412653b2a51c4b222d3f3b801d1853c3574c @@ -5390,8 +5674,8 @@ trackedFiles: pristine_git_object: 2ee3ab0f79d6cae0f1e1a6d5f42abc63c78bc82d src/clerk_backend_api/models/updateorganizationop.py: id: 2512f0951ecb - last_write_checksum: sha1:26cbe7c2164c5f32a62a6671584b1888d1f267aa - pristine_git_object: c476d5a02b4cb4925d952ab14a6bba874e769240 + last_write_checksum: sha1:25a0d41a57d51ee24ab49ed60ccbd3dc596225e0 + pristine_git_object: 9d619fff43c077a305f5017c86eec46029cd7fec src/clerk_backend_api/models/updateorganizationpermissionop.py: id: 20032baa3021 last_write_checksum: sha1:a39e653648ea550fa2bd53160642b6f394b88217 @@ -5418,8 +5702,8 @@ trackedFiles: pristine_git_object: 16db44c976a3a96352d8a5c2baf5dcbfafa8cae1 src/clerk_backend_api/models/updatescimdirectoryop.py: id: 45b6800f31ca - last_write_checksum: sha1:4404b9331e7555e68e216266403b8870bb59c8f4 - pristine_git_object: e6dbae1106d15c33f408055150c8bd0489709343 + last_write_checksum: sha1:31f93568f6729ca334d343fdbd51b217f8d39811 + pristine_git_object: d72af65d6340c07fecaff83395b91c166910f5a1 src/clerk_backend_api/models/updatesignupop.py: id: 8d2a3b3dc83c last_write_checksum: sha1:3ada82503b73a33b5d385e67a4f450668e4180d5 @@ -5430,8 +5714,8 @@ trackedFiles: pristine_git_object: 5472bee799c8c9af8186b7ec0a49130703153271 src/clerk_backend_api/models/updateuserop.py: id: ef223ada8638 - last_write_checksum: sha1:b1e5299a8ebb83059898826737c6b2ee7361cd59 - pristine_git_object: 3d4b370cb4348a11000090d6a17cc03d31e55935 + last_write_checksum: sha1:d04945687e4a2a4b61ee019ddfcac62e23c68321 + pristine_git_object: 548c1ce09f1ec9eea5020c6e0f948ae48714f38b src/clerk_backend_api/models/uploadoauthapplicationlogoop.py: id: 1d89c357970b last_write_checksum: sha1:2edbc236bdac53e7787b36df26ff12fac4e9104e @@ -5446,8 +5730,8 @@ trackedFiles: pristine_git_object: ef8a1b4331c3b8d3dfb1f54c759f312acc40b378 src/clerk_backend_api/models/user.py: id: 670e52d1fa4e - last_write_checksum: sha1:ab0b65bb033fd5143055dc36fda72fa1d54abda0 - pristine_git_object: e002151960f2df0aabf08c0715f0eb991a482096 + last_write_checksum: sha1:a648a821b4766f75e3b7e8e8e73cf59dbffaf0c3 + pristine_git_object: 0f35be42b61e15824927c7ec64c09d32c1b7b09b src/clerk_backend_api/models/userpasskeydeleteop.py: id: 28b3f343b764 last_write_checksum: sha1:e25d07c5167b6afad3bb5f48d4d35c85759d349b @@ -5522,8 +5806,8 @@ trackedFiles: pristine_git_object: 8a1645cbb854bc36196ddab791ad4d05fe4bd431 src/clerk_backend_api/oauthapplications_sdk.py: id: ba92518ed381 - last_write_checksum: sha1:4b23019b3d646a798e777d998763b47b26efc2c7 - pristine_git_object: 769ec712a1d5556746b8b2ec903b3c1c36d47998 + last_write_checksum: sha1:28812b6de115d9e212a943c88d29ddb5270c8217 + pristine_git_object: b07a20356da18720e45d28dc991df74f9c8051f3 src/clerk_backend_api/organizationdomains_sdk.py: id: b3594639c697 last_write_checksum: sha1:79a6ae1eea25537fd8896f6db4e5955b5d34cd4c @@ -5546,8 +5830,8 @@ trackedFiles: pristine_git_object: 30345824bb452973ed170c26311d2f5f0e75eaef src/clerk_backend_api/organizations_sdk.py: id: bab9dfd5e53d - last_write_checksum: sha1:821f0cc2705cf60e9959a28c65eb7198155811a6 - pristine_git_object: 4d649ab115cb05dffc31904d3601ef0aa741a8f3 + last_write_checksum: sha1:b7f97f75f2d8d5f6d36850c9254257a9a74ef6bc + pristine_git_object: 4694dcac3b749e72ab9e76d55977830d66ac7b08 src/clerk_backend_api/phonenumbers.py: id: 33263264377c last_write_checksum: sha1:9e7210c61326b1f207879db1b6d3f5de3548f18c @@ -5574,12 +5858,12 @@ trackedFiles: pristine_git_object: 60e42f946176f374f7cdc216937070fdb3db73fa src/clerk_backend_api/scimdirectories.py: id: a7d83ea3ff0e - last_write_checksum: sha1:c4e1c672570d1960911cf802e2137293996d2656 - pristine_git_object: 220d002680b4a287aec2d81e1ee8025536161887 + last_write_checksum: sha1:d5a33758c0000bf635214b28d2da7d93b3d1bd43 + pristine_git_object: 6f1905dbb3161178349906d76081ac9c9cf925ff src/clerk_backend_api/sdk.py: id: a4df06d800b5 - last_write_checksum: sha1:4c9cf4102249d89fb1f289084ada46b259cf779d - pristine_git_object: 3ec0474bf05d64137d173cda543dc4ebe4bd4239 + last_write_checksum: sha1:17ae225f05e06cee43f45d9a730d069debd9ef83 + pristine_git_object: 2e2c8da353a280183e3abeacbbd7d2c831ca0134 src/clerk_backend_api/sdkconfiguration.py: id: 7e4c691f3b9b last_write_checksum: sha1:da2b3b79da1f6d4669245a6bdd11b20657da25da @@ -5618,8 +5902,8 @@ trackedFiles: pristine_git_object: a9a640a1a7048736383f96c67c6290c86bf536ee src/clerk_backend_api/users.py: id: 6f835640685a - last_write_checksum: sha1:50ab301940b6f957c9431cbb8b06033dcdd12b4b - pristine_git_object: 86b8cda30d49c52dc04b95ea678203e086aabdc4 + last_write_checksum: sha1:0fcfaeb8f774c111e45b2e290dede386f17bccb8 + pristine_git_object: e4b6573fcbbc6a59b493f6a0fcd1a3594e346a90 src/clerk_backend_api/utils/__init__.py: id: a8b67e49e50a last_write_checksum: sha1:53c9544397bbc534c45a228feac3cdb2e9017fe6 @@ -5670,8 +5954,8 @@ trackedFiles: pristine_git_object: 591415af8e64baa410627b507d2740afb5387d13 src/clerk_backend_api/utils/retries.py: id: c8a5b5c54d76 - last_write_checksum: sha1:3585b891142f30a597fbf7a2f0340700babef8e4 - pristine_git_object: ca7b59efebbbd9545744d0207ef42725c4cc5143 + last_write_checksum: sha1:251e4dd969bb6c06025afe1bad1b5035e94c2060 + pristine_git_object: 406c1e7c36c7a4fa4fb48bb567d254e2803e1792 src/clerk_backend_api/utils/security.py: id: ed2da5f2f80c last_write_checksum: sha1:c11eef495b6aaa249178c24c796940cc540b7a00 @@ -5690,8 +5974,8 @@ trackedFiles: pristine_git_object: c78ccbae426ce6d385709d97ce0b1c2813ea2418 src/clerk_backend_api/utils/values.py: id: 83b25b69ced2 - last_write_checksum: sha1:acaa178a7c41ddd000f58cc691e4632d925b2553 - pristine_git_object: dae01a44384ac3bc13ae07453a053bf6c898ebe3 + last_write_checksum: sha1:65e1ee8607767a4fc1ae7a55c74d77a23ab3cef1 + pristine_git_object: ac217f473c5d52a454a2979b3eb35e66175d365c src/clerk_backend_api/waitlistentries_sdk.py: id: 1499ce41c317 last_write_checksum: sha1:6abe8b1d1bcdd8c3a47408c84eca8ea2e78dca3d @@ -6070,18 +6354,19 @@ examples: last_sign_in_at_after: 1700690400000 provider: "" provider_user_id: [""] + starting_after: "" responses: "200": - application/json: [{"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "zh", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 840489, "expire_at": 779542, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "unverified", "strategy": "phone_code", "attempts": 905234, "expire_at": 563928, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": null, "expire_at": 682381, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": null, "attempts": 634404, "expire_at": 583086, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 462651, "external_accounts": [{"object": "external_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Timothy_Armstrong@yahoo.com", "email_address_verified": false, "first_name": "Amya", "last_name": "Nicolas", "image_url": "https://sore-patroller.name", "username": "Thurman.Smith90", "phone_number": "(690) 819-2224 x7382", "public_metadata": {}, "label": "", "created_at": 470136, "updated_at": 761414, "verification": {"object": "verification_google_one_tap", "status": "unverified", "strategy": "google_one_tap", "expire_at": 827691, "attempts": 307866, "verified_at_client": "", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 790596, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_saml", "status": "unverified", "strategy": "saml", "external_verification_redirect_url": "https://tricky-mousse.com/", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 682430, "attempts": 419582, "verified_at_client": ""}, "saml_connection": null}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": false, "email_address": "Edison.Brekke90@hotmail.com", "first_name": "Timothy", "last_name": "Schneider", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": ""}, "verification": {"object": "verification_saml", "status": "verified", "strategy": "saml", "external_verification_redirect_url": "https://pushy-mythology.name", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": null, "attempts": 171073, "verified_at_client": ""}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://smug-finding.org/", "domain": "elegant-napkin.com", "domains": [""], "active": false, "sync_user_attributes": false, "allow_subdomains": true, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 35715, "updated_at": 148555}, "last_authenticated_at": 50025}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://palatable-backburn.name", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 419582, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 365714, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Annabell", "last_name": "Pollich", "profile_image_url": "https://dearest-retrospectivity.biz", "image_url": "https://able-chap.info/", "has_image": true, "identifier": "", "username": null, "banned": true, "deprovisioned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 908237, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}}] + application/json: [{"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "zh", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 840489, "expire_at": 779542, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "unverified", "strategy": "phone_code", "attempts": 905234, "expire_at": 563928, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": null, "expire_at": 682381, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": null, "attempts": 634404, "expire_at": 583086, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 462651, "external_accounts": [{"object": "external_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Timothy_Armstrong@yahoo.com", "email_address_verified": false, "first_name": "Amya", "last_name": "Nicolas", "image_url": "https://sore-patroller.name", "username": "Thurman.Smith90", "phone_number": "(690) 819-2224 x7382", "public_metadata": {}, "label": "", "created_at": 470136, "updated_at": 761414, "verification": {"object": "verification_google_one_tap", "status": "unverified", "strategy": "google_one_tap", "expire_at": 827691, "attempts": 307866, "verified_at_client": "", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 790596, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_saml", "status": "unverified", "strategy": "saml", "external_verification_redirect_url": "https://tricky-mousse.com/", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 682430, "attempts": 419582, "verified_at_client": ""}, "saml_connection": null}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": false, "email_address": "Edison.Brekke90@hotmail.com", "first_name": "Timothy", "last_name": "Schneider", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": ""}, "verification": {"object": "verification_saml", "status": "verified", "strategy": "saml", "external_verification_redirect_url": "https://pushy-mythology.name", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": null, "attempts": 171073, "verified_at_client": ""}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://smug-finding.org/", "domain": "elegant-napkin.com", "domains": [""], "active": false, "sync_user_attributes": false, "allow_subdomains": true, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 35715, "updated_at": 148555}, "last_authenticated_at": 50025}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://palatable-backburn.name", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 419582, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 365714, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Annabell", "last_name": "Pollich", "profile_image_url": "https://dearest-retrospectivity.biz", "image_url": "https://able-chap.info/", "has_image": true, "identifier": "", "username": null, "banned": true, "deprovisioned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 908237, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}}] "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} CreateUser: speakeasy-default-create-user: requestBody: - application/json: {"external_id": "ext-id-001", "first_name": "John", "last_name": "Doe", "locale": "en", "email_address": ["john.doe@example.com"], "email_address_identification_status": ["reserved"], "phone_number": ["+12345678901"], "phone_number_identification_status": ["verified"], "web3_wallet": ["0x123456789abcdef0x123456789abcdef"], "username": "johndoe123", "password": "Secure*Pass4", "password_digest": "$argon2i$v=19$m=4096,t=3,p=1$4t6CL3P7YiHBtwESXawI8Hm20zJj4cs7/4/G3c187e0$m7RQFczcKr5bIR0IIxbpO2P0tyrLjf3eUW3M3QSwnLc", "password_hasher": "", "skip_password_checks": false, "skip_password_requirement": false, "totp_secret": "base32totpsecretkey", "backup_codes": ["123456", "654321"], "public_metadata": {"role": "user"}, "private_metadata": {"internal_id": "789"}, "unsafe_metadata": {"preferences": {"theme": "dark"}}, "delete_self_enabled": true, "legal_accepted_at": "", "skip_legal_checks": false, "skip_user_requirement": true, "create_organization_enabled": null, "create_organizations_limit": 81560, "created_at": "2023-03-15T07:15:20.902Z", "bypass_client_trust": true, "banned": true, "locked": false} + application/json: {"external_id": "ext-id-001", "first_name": "John", "last_name": "Doe", "locale": "en", "email_address": ["john.doe@example.com"], "email_address_identification_status": ["reserved"], "phone_number": ["+12345678901"], "phone_number_identification_status": ["verified"], "web3_wallet": ["0x123456789abcdef0x123456789abcdef"], "username": "johndoe123", "password": "Secure*Pass4", "password_digest": "$argon2i$v=19$m=4096,t=3,p=1$4t6CL3P7YiHBtwESXawI8Hm20zJj4cs7/4/G3c187e0$m7RQFczcKr5bIR0IIxbpO2P0tyrLjf3eUW3M3QSwnLc", "password_hasher": "", "skip_password_checks": false, "skip_password_requirement": false, "skip_restriction_checks": true, "totp_secret": "base32totpsecretkey", "backup_codes": ["123456", "654321"], "public_metadata": {"role": "user"}, "private_metadata": {"internal_id": "789"}, "unsafe_metadata": {"preferences": {"theme": "dark"}}, "delete_self_enabled": true, "legal_accepted_at": "", "skip_legal_checks": false, "skip_user_requirement": true, "create_organization_enabled": null, "create_organizations_limit": 81560, "created_at": "2023-03-15T07:15:20.902Z", "bypass_client_trust": true, "banned": true, "locked": false} responses: "200": - application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "nl", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": null, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": true, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 2, "expire_at": 1622852400, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 0, "expire_at": 1620000000, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 15137, "external_accounts": [{"object": "facebook_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Jordi_Considine@hotmail.com", "email_address_verified": false, "first_name": "Nova", "last_name": "Barrows", "image_url": null, "username": "Peggie1", "phone_number": "(240) 834-3897 x5758", "public_metadata": {"key": "", "key1": ""}, "label": null, "created_at": 149561, "updated_at": 182730, "verification": {"object": "verification_google_one_tap", "status": "unverified", "strategy": "google_one_tap", "expire_at": 432680, "attempts": 818362, "verified_at_client": "", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 35779, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": 1622852400, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": false, "email_address": "Jay.Schmitt@gmail.com", "first_name": "Vincenza", "last_name": "Rosenbaum", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": "", "key1": ""}, "verification": {"object": "verification_ticket", "status": "expired", "strategy": "ticket", "attempts": 485856, "expire_at": 538593, "verified_at_client": null}, "enterprise_connection": null, "last_authenticated_at": 793877}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://any-pension.com", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 8333, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 149561, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Susana", "last_name": "Kling", "profile_image_url": "https://suburban-doing.name/", "image_url": "https://faraway-onset.info/", "has_image": false, "identifier": "", "username": "Savannah83", "banned": false, "deprovisioned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 476222, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": true, "external_id": ""}} + application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "nl", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": null, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": true, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 2, "expire_at": 1622852400, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 0, "expire_at": 1620000000, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 15137, "external_accounts": [{"object": "facebook_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Jordi_Considine@hotmail.com", "email_address_verified": false, "first_name": "Nova", "last_name": "Barrows", "image_url": null, "username": "Peggie1", "phone_number": "(240) 834-3897 x5758", "public_metadata": {"key": "", "key1": ""}, "label": null, "created_at": 149561, "updated_at": 182730, "verification": {"object": "verification_google_one_tap", "status": "unverified", "strategy": "google_one_tap", "expire_at": 432680, "attempts": 818362, "verified_at_client": "", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 35779, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": 1622852400, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": false, "email_address": "Jay.Schmitt@gmail.com", "first_name": "Vincenza", "last_name": "Rosenbaum", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": "", "key1": ""}, "verification": {"object": "verification_ticket", "status": "expired", "strategy": "ticket", "attempts": 485856, "expire_at": 538593, "verified_at_client": null}, "enterprise_connection": null, "last_authenticated_at": 793877}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://any-pension.com", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 8333, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": false, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 149561, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Susana", "last_name": "Kling", "profile_image_url": "https://suburban-doing.name/", "image_url": "https://faraway-onset.info/", "has_image": false, "identifier": "", "username": "Savannah83", "banned": false, "deprovisioned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 476222, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": true, "external_id": ""}} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} GetUsersCount: @@ -6147,7 +6432,7 @@ examples: user_id: "usr_1" responses: "200": - application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "sv", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": null, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 2, "expire_at": 1622852400, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 0, "expire_at": 1620000000, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 664708, "external_accounts": [{"object": "facebook_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Kristofer22@yahoo.com", "email_address_verified": false, "first_name": "Godfrey", "last_name": "Leffler", "image_url": "https://monthly-mobility.com/", "username": "Melisa.Strosin59", "phone_number": "786.245.5997", "public_metadata": {"key": ""}, "label": "", "created_at": 887303, "updated_at": 879970, "verification": null, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 549440, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_saml", "status": "verified", "strategy": "saml", "external_verification_redirect_url": "https://immediate-goodwill.name", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 484271, "attempts": null, "verified_at_client": ""}, "saml_connection": null}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": true, "email_address": "Raymundo.Carroll@hotmail.com", "first_name": "Vicente", "last_name": "Farrell", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": "", "key1": ""}, "verification": {"object": "verification_oauth", "status": "failed", "strategy": "", "external_verification_redirect_url": "https://ornate-best-seller.biz", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 706654, "attempts": 452888, "verified_at_client": ""}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://uncomfortable-bend.org", "domain": "robust-appliance.org", "domains": ["", ""], "active": false, "sync_user_attributes": false, "allow_subdomains": false, "allow_idp_initiated": false, "disable_additional_identifications": true, "created_at": 134514, "updated_at": 373210}, "last_authenticated_at": 664608}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://wrong-warming.biz/", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 65195, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 786870, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Mikel", "last_name": null, "profile_image_url": "https://vain-violin.name/", "image_url": "https://compassionate-elevation.name", "has_image": true, "identifier": "", "username": null, "banned": false, "deprovisioned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": false, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 346719, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} + application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "sv", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": null, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 2, "expire_at": 1622852400, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 0, "expire_at": 1620000000, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 664708, "external_accounts": [{"object": "facebook_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Kristofer22@yahoo.com", "email_address_verified": false, "first_name": "Godfrey", "last_name": "Leffler", "image_url": "https://monthly-mobility.com/", "username": "Melisa.Strosin59", "phone_number": "786.245.5997", "public_metadata": {"key": ""}, "label": "", "created_at": 887303, "updated_at": 879970, "verification": null, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 549440, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_saml", "status": "verified", "strategy": "saml", "external_verification_redirect_url": "https://immediate-goodwill.name", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 484271, "attempts": null, "verified_at_client": ""}, "saml_connection": null}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": true, "email_address": "Raymundo.Carroll@hotmail.com", "first_name": "Vicente", "last_name": "Farrell", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": "", "key1": ""}, "verification": {"object": "verification_oauth", "status": "failed", "strategy": "", "external_verification_redirect_url": "https://ornate-best-seller.biz", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 706654, "attempts": 452888, "verified_at_client": ""}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://uncomfortable-bend.org", "domain": "robust-appliance.org", "domains": ["", ""], "active": false, "sync_user_attributes": false, "allow_subdomains": false, "allow_idp_initiated": false, "disable_additional_identifications": true, "created_at": 134514, "updated_at": 373210}, "last_authenticated_at": 664608}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://wrong-warming.biz/", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 65195, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": false, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 786870, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Mikel", "last_name": null, "profile_image_url": "https://vain-violin.name/", "image_url": "https://compassionate-elevation.name", "has_image": true, "identifier": "", "username": null, "banned": false, "deprovisioned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": false, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 346719, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} UpdateUser: @@ -6159,7 +6444,7 @@ examples: application/json: {"external_id": "ext_123", "first_name": "Jane", "last_name": "Doe", "locale": "nl", "primary_email_address_id": "eml_12345", "notify_primary_email_address_changed": true, "primary_phone_number_id": "phn_67890", "primary_web3_wallet_id": "wlt_123", "username": "janedoe", "profile_image_id": "img_789", "password": "secretPass123!", "password_digest": "$argon2i$v=19$m=4096,t=3,p=1$4t6CL3P7YiHBtwESXawI8Hm20zJj4cs7/4/G3c187e0$m7RQFczcKr5bIR0IIxbpO2P0tyrLjf3eUW3M3QSwnLc", "password_hasher": "", "skip_password_checks": false, "sign_out_of_other_sessions": true, "totp_secret": "ABCD1234EFGH5678", "backup_codes": ["123456", "654321"], "delete_self_enabled": true, "create_organization_enabled": false, "legal_accepted_at": "", "skip_legal_checks": false, "create_organizations_limit": 824457, "created_at": "2021-04-05T14:30:00.000Z", "bypass_client_trust": false} responses: "200": - application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "da", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 232556, "expire_at": 715922, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 2, "expire_at": 1622852400, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": null, "expire_at": null, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 625102, "external_accounts": [{"object": "facebook_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Aubree_Ernser44@gmail.com", "email_address_verified": false, "first_name": "Wilson", "last_name": "Dicki", "image_url": "https://interesting-airline.org", "username": "Giovani56", "phone_number": "(648) 722-7745 x34591", "public_metadata": {}, "label": "", "created_at": 713891, "updated_at": 906707, "verification": {"object": "verification_google_one_tap", "status": "verified", "strategy": "google_one_tap", "expire_at": 1615462399, "attempts": 1, "verified_at_client": "", "error": null}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 549643, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_saml", "status": "verified", "strategy": "saml", "external_verification_redirect_url": "https://example.com/saml_callback", "error": null, "expire_at": 1622852400, "attempts": null, "verified_at_client": ""}, "saml_connection": null}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": false, "email_address": "Heath23@yahoo.com", "first_name": "Jason", "last_name": "Jaskolski", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": ""}, "verification": {"object": "verification_ticket", "status": "unverified", "strategy": "ticket", "attempts": null, "expire_at": 935960, "verified_at_client": ""}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://reckless-patroller.info/", "domains": [], "active": false, "sync_user_attributes": false, "allow_subdomains": true, "allow_idp_initiated": false, "disable_additional_identifications": false, "created_at": 870621, "updated_at": 566438}, "last_authenticated_at": 176125}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://scornful-testing.biz/", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 170674, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 932833, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": null, "last_name": "Smitham", "profile_image_url": "https://wee-jacket.com", "image_url": "https://shoddy-cassava.org", "has_image": true, "identifier": "", "username": "Bruce61", "banned": true, "deprovisioned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": false, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 940474, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} + application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "da", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 232556, "expire_at": 715922, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 2, "expire_at": 1622852400, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": null, "expire_at": null, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 625102, "external_accounts": [{"object": "facebook_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Aubree_Ernser44@gmail.com", "email_address_verified": false, "first_name": "Wilson", "last_name": "Dicki", "image_url": "https://interesting-airline.org", "username": "Giovani56", "phone_number": "(648) 722-7745 x34591", "public_metadata": {}, "label": "", "created_at": 713891, "updated_at": 906707, "verification": {"object": "verification_google_one_tap", "status": "verified", "strategy": "google_one_tap", "expire_at": 1615462399, "attempts": 1, "verified_at_client": "", "error": null}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 549643, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_saml", "status": "verified", "strategy": "saml", "external_verification_redirect_url": "https://example.com/saml_callback", "error": null, "expire_at": 1622852400, "attempts": null, "verified_at_client": ""}, "saml_connection": null}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": false, "email_address": "Heath23@yahoo.com", "first_name": "Jason", "last_name": "Jaskolski", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": ""}, "verification": {"object": "verification_ticket", "status": "unverified", "strategy": "ticket", "attempts": null, "expire_at": 935960, "verified_at_client": ""}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://reckless-patroller.info/", "domains": [], "active": false, "sync_user_attributes": false, "allow_subdomains": true, "allow_idp_initiated": false, "disable_additional_identifications": false, "created_at": 870621, "updated_at": 566438}, "last_authenticated_at": 176125}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://scornful-testing.biz/", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 170674, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": false, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 932833, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": null, "last_name": "Smitham", "profile_image_url": "https://wee-jacket.com", "image_url": "https://shoddy-cassava.org", "has_image": true, "identifier": "", "username": "Bruce61", "banned": true, "deprovisioned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": false, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 940474, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} DeleteUser: @@ -6179,7 +6464,7 @@ examples: user_id: "user_12345" responses: "200": - application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "en", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_from_oauth", "status": "verified", "strategy": "admin", "error": null, "expire_at": 117089, "attempts": 222590, "verified_at_client": null}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "email_code", "attempts": 2, "expire_at": 1622852400, "channel": "", "verified_at_client": null}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_web3", "status": "verified", "strategy": "web3_metamask_signature", "nonce": "nonce_value", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 49333, "external_accounts": [{"object": "external_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Tyreek31@gmail.com", "email_address_verified": true, "first_name": "Freda", "last_name": "Larkin", "image_url": "https://aggravating-creature.org/", "username": "Taya.Kessler90", "phone_number": "256.205.2962", "public_metadata": {"key": "", "key1": ""}, "label": null, "created_at": 228824, "updated_at": 409743, "verification": {"object": "verification_oauth", "status": "verified", "strategy": "oauth_google", "external_verification_redirect_url": "https://oauth.google.com/verify", "error": null, "expire_at": 1615462399, "attempts": 1, "verified_at_client": ""}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 117089, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": 1622852400, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "oauth", "provider": "", "active": true, "email_address": "Autumn.Pfannerstill@gmail.com", "first_name": "Vern", "last_name": "Gulgowski", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": "", "key1": ""}, "verification": {"object": "verification_ticket", "status": "expired", "strategy": "ticket", "attempts": 383637, "expire_at": 230067, "verified_at_client": ""}, "enterprise_connection": null, "last_authenticated_at": 847387}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://upbeat-editor.info/", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 198918, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 731932, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": null, "last_name": "Haley", "profile_image_url": null, "image_url": "https://frightened-marketplace.info/", "has_image": true, "identifier": "", "username": "Richard_Wehner3", "banned": false, "deprovisioned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 589544, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": true, "external_id": ""}} + application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "en", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_from_oauth", "status": "verified", "strategy": "admin", "error": null, "expire_at": 117089, "attempts": 222590, "verified_at_client": null}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "email_code", "attempts": 2, "expire_at": 1622852400, "channel": "", "verified_at_client": null}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_web3", "status": "verified", "strategy": "web3_metamask_signature", "nonce": "nonce_value", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 49333, "external_accounts": [{"object": "external_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Tyreek31@gmail.com", "email_address_verified": true, "first_name": "Freda", "last_name": "Larkin", "image_url": "https://aggravating-creature.org/", "username": "Taya.Kessler90", "phone_number": "256.205.2962", "public_metadata": {"key": "", "key1": ""}, "label": null, "created_at": 228824, "updated_at": 409743, "verification": {"object": "verification_oauth", "status": "verified", "strategy": "oauth_google", "external_verification_redirect_url": "https://oauth.google.com/verify", "error": null, "expire_at": 1615462399, "attempts": 1, "verified_at_client": ""}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 117089, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": 1622852400, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "oauth", "provider": "", "active": true, "email_address": "Autumn.Pfannerstill@gmail.com", "first_name": "Vern", "last_name": "Gulgowski", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": "", "key1": ""}, "verification": {"object": "verification_ticket", "status": "expired", "strategy": "ticket", "attempts": 383637, "expire_at": 230067, "verified_at_client": ""}, "enterprise_connection": null, "last_authenticated_at": 847387}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://upbeat-editor.info/", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 198918, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 731932, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": null, "last_name": "Haley", "profile_image_url": null, "image_url": "https://frightened-marketplace.info/", "has_image": true, "identifier": "", "username": "Richard_Wehner3", "banned": false, "deprovisioned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 589544, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": true, "external_id": ""}} "402": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} UnbanUser: @@ -6189,7 +6474,7 @@ examples: user_id: "user_12345" responses: "200": - application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "ru", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "email_code", "attempts": 1, "expire_at": 1615462399, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "email_code", "attempts": 2, "expire_at": 1622852400, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 0, "expire_at": 1620000000, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 340622, "external_accounts": [{"object": "external_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Willa_Lesch@yahoo.com", "email_address_verified": true, "first_name": "Lafayette", "last_name": "Emard", "image_url": "https://stale-skean.biz", "username": null, "phone_number": "686.924.9156", "public_metadata": {"key": "", "key1": "", "key2": ""}, "label": "", "created_at": 987413, "updated_at": 267247, "verification": {"object": "verification_oauth", "status": "verified", "strategy": "oauth_google", "external_verification_redirect_url": "https://oauth.google.com/verify", "error": null, "expire_at": 1615462399, "attempts": 1, "verified_at_client": ""}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 648874, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": 1622852400, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": ["", ""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": false, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://swift-developing.name", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 881019, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 257330, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Willa", "last_name": "O'Kon", "profile_image_url": "https://oval-bookend.biz", "image_url": "https://wrathful-season.net", "has_image": true, "identifier": null, "username": "Era.Gleichner-Fisher", "banned": true, "deprovisioned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 412656, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} + application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "ru", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "email_code", "attempts": 1, "expire_at": 1615462399, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "email_code", "attempts": 2, "expire_at": 1622852400, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 0, "expire_at": 1620000000, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 340622, "external_accounts": [{"object": "external_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Willa_Lesch@yahoo.com", "email_address_verified": true, "first_name": "Lafayette", "last_name": "Emard", "image_url": "https://stale-skean.biz", "username": null, "phone_number": "686.924.9156", "public_metadata": {"key": "", "key1": "", "key2": ""}, "label": "", "created_at": 987413, "updated_at": 267247, "verification": {"object": "verification_oauth", "status": "verified", "strategy": "oauth_google", "external_verification_redirect_url": "https://oauth.google.com/verify", "error": null, "expire_at": 1615462399, "attempts": 1, "verified_at_client": ""}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 648874, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": 1622852400, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": ["", ""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": false, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://swift-developing.name", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 881019, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 257330, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Willa", "last_name": "O'Kon", "profile_image_url": "https://oval-bookend.biz", "image_url": "https://wrathful-season.net", "has_image": true, "identifier": null, "username": "Era.Gleichner-Fisher", "banned": true, "deprovisioned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 412656, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} "402": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} LockUser: @@ -6199,7 +6484,7 @@ examples: user_id: "user_123456789" responses: "200": - application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "it", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 1, "expire_at": 1615462399, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 2, "expire_at": 1622852400, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": null, "expire_at": null, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 230185, "external_accounts": [{"object": "facebook_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Don.West@gmail.com", "email_address_verified": true, "first_name": "Chesley", "last_name": "Shanahan", "image_url": "https://muddy-cuckoo.biz", "username": "Vernon59", "phone_number": "824-825-4224 x937", "public_metadata": {}, "label": "", "created_at": 869240, "updated_at": 610510, "verification": {"object": "verification_oauth", "status": "unverified", "strategy": "google_one_tap", "external_verification_redirect_url": "https://square-smoke.net/", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 656786, "attempts": 769139, "verified_at_client": ""}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 887294, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": null, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": true, "email_address": "Dora.Rolfson@hotmail.com", "first_name": "Don", "last_name": "Haley", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": ""}, "verification": {"object": "verification_oauth", "status": "transferable", "strategy": "", "external_verification_redirect_url": "https://muddy-cuckoo.biz", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 958342, "attempts": 520911, "verified_at_client": null}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": null, "domains": ["", "", ""], "active": false, "sync_user_attributes": false, "allow_subdomains": false, "allow_idp_initiated": false, "disable_additional_identifications": true, "created_at": 25659, "updated_at": 330463}, "last_authenticated_at": 114694}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://urban-marketplace.name/", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 825654, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 606431, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Jacinthe", "last_name": "Hessel", "profile_image_url": null, "image_url": "https://teeming-plugin.info/", "has_image": true, "identifier": "", "username": "Nyasia_OKeefe", "banned": true, "deprovisioned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 825654, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} + application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "it", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 1, "expire_at": 1615462399, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 2, "expire_at": 1622852400, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": null, "expire_at": null, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 230185, "external_accounts": [{"object": "facebook_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Don.West@gmail.com", "email_address_verified": true, "first_name": "Chesley", "last_name": "Shanahan", "image_url": "https://muddy-cuckoo.biz", "username": "Vernon59", "phone_number": "824-825-4224 x937", "public_metadata": {}, "label": "", "created_at": 869240, "updated_at": 610510, "verification": {"object": "verification_oauth", "status": "unverified", "strategy": "google_one_tap", "external_verification_redirect_url": "https://square-smoke.net/", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 656786, "attempts": 769139, "verified_at_client": ""}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 887294, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": null, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": true, "email_address": "Dora.Rolfson@hotmail.com", "first_name": "Don", "last_name": "Haley", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": ""}, "verification": {"object": "verification_oauth", "status": "transferable", "strategy": "", "external_verification_redirect_url": "https://muddy-cuckoo.biz", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 958342, "attempts": 520911, "verified_at_client": null}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": null, "domains": ["", "", ""], "active": false, "sync_user_attributes": false, "allow_subdomains": false, "allow_idp_initiated": false, "disable_additional_identifications": true, "created_at": 25659, "updated_at": 330463}, "last_authenticated_at": 114694}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://urban-marketplace.name/", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 825654, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 606431, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Jacinthe", "last_name": "Hessel", "profile_image_url": null, "image_url": "https://teeming-plugin.info/", "has_image": true, "identifier": "", "username": "Nyasia_OKeefe", "banned": true, "deprovisioned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 825654, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} "403": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} UnlockUser: @@ -6209,7 +6494,7 @@ examples: user_id: "user_12345" responses: "200": - application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "sv", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "email_code", "attempts": 1, "expire_at": 1615462399, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 2, "expire_at": 1622852400, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": null, "expire_at": null, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 664479, "external_accounts": [{"object": "facebook_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Javier.Bechtelar-Bartoletti61@yahoo.com", "email_address_verified": false, "first_name": "Edd", "last_name": "McCullough", "image_url": null, "username": "Shannon9", "phone_number": "907-845-3349 x0026", "public_metadata": {"key": ""}, "label": "", "created_at": 259844, "updated_at": 982099, "verification": {"object": "verification_oauth", "status": "verified", "strategy": "oauth_google", "external_verification_redirect_url": "https://oauth.google.com/verify", "error": null, "expire_at": 1615462399, "attempts": 1, "verified_at_client": null}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 649637, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_saml", "status": "verified", "strategy": "saml", "external_verification_redirect_url": "https://buzzing-freckle.org", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 250489, "attempts": null, "verified_at_client": null}, "saml_connection": null}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": false, "email_address": "Ashlynn.Stroman@hotmail.com", "first_name": "Javier", "last_name": "Bartoletti", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": ""}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": 881795, "verified_at_client": ""}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": null, "domains": ["", ""], "active": true, "sync_user_attributes": true, "allow_subdomains": true, "allow_idp_initiated": false, "disable_additional_identifications": false, "created_at": 365844, "updated_at": 85440}, "last_authenticated_at": 10111}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://thin-countess.com/", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 646443, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 522327, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Janessa", "last_name": "Barton", "profile_image_url": "https://putrid-thyme.com", "image_url": "https://handy-pocket-watch.info/", "has_image": false, "identifier": "", "username": "Priscilla8", "banned": true, "deprovisioned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": false, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 200899, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} + application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "sv", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "email_code", "attempts": 1, "expire_at": 1615462399, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 2, "expire_at": 1622852400, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": null, "expire_at": null, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 664479, "external_accounts": [{"object": "facebook_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Javier.Bechtelar-Bartoletti61@yahoo.com", "email_address_verified": false, "first_name": "Edd", "last_name": "McCullough", "image_url": null, "username": "Shannon9", "phone_number": "907-845-3349 x0026", "public_metadata": {"key": ""}, "label": "", "created_at": 259844, "updated_at": 982099, "verification": {"object": "verification_oauth", "status": "verified", "strategy": "oauth_google", "external_verification_redirect_url": "https://oauth.google.com/verify", "error": null, "expire_at": 1615462399, "attempts": 1, "verified_at_client": null}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 649637, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_saml", "status": "verified", "strategy": "saml", "external_verification_redirect_url": "https://buzzing-freckle.org", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 250489, "attempts": null, "verified_at_client": null}, "saml_connection": null}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": false, "email_address": "Ashlynn.Stroman@hotmail.com", "first_name": "Javier", "last_name": "Bartoletti", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": ""}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": 881795, "verified_at_client": ""}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": null, "domains": ["", ""], "active": true, "sync_user_attributes": true, "allow_subdomains": true, "allow_idp_initiated": false, "disable_additional_identifications": false, "created_at": 365844, "updated_at": 85440}, "last_authenticated_at": 10111}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://thin-countess.com/", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 646443, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": false, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 522327, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Janessa", "last_name": "Barton", "profile_image_url": "https://putrid-thyme.com", "image_url": "https://handy-pocket-watch.info/", "has_image": false, "identifier": "", "username": "Priscilla8", "banned": true, "deprovisioned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": false, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 200899, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} "403": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} SetUserProfileImage: @@ -6221,7 +6506,7 @@ examples: multipart/form-data: {"file": "x-file: example.file"} responses: "200": - application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "hi", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": null, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": true, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 2, "expire_at": 1622852400, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_web3", "status": "verified", "strategy": "web3_metamask_signature", "nonce": "nonce_value", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": null, "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 571350, "external_accounts": [{"object": "facebook_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Evalyn13@hotmail.com", "email_address_verified": false, "first_name": "Jewel", "last_name": "Hackett", "image_url": "https://rare-iridescence.name", "username": "Hollis45", "phone_number": "275.296.7398 x121", "public_metadata": {"key": ""}, "label": "", "created_at": 947362, "updated_at": 25796, "verification": {"object": "verification_google_one_tap", "status": "verified", "strategy": "google_one_tap", "expire_at": 1615462399, "attempts": 1, "verified_at_client": "", "error": null}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 813862, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": 1622852400, "verified_at_client": null}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": ["", ""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": false, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://juicy-barracks.net", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 978454, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 637303, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Evalyn", "last_name": "Buckridge", "profile_image_url": "https://untried-knickers.name/", "image_url": "https://monumental-yogurt.name/", "has_image": true, "identifier": "", "username": "Hollis45", "banned": false, "deprovisioned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": false, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 830110, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} + application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "hi", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": null, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": true, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 2, "expire_at": 1622852400, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_web3", "status": "verified", "strategy": "web3_metamask_signature", "nonce": "nonce_value", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": null, "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 571350, "external_accounts": [{"object": "facebook_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Evalyn13@hotmail.com", "email_address_verified": false, "first_name": "Jewel", "last_name": "Hackett", "image_url": "https://rare-iridescence.name", "username": "Hollis45", "phone_number": "275.296.7398 x121", "public_metadata": {"key": ""}, "label": "", "created_at": 947362, "updated_at": 25796, "verification": {"object": "verification_google_one_tap", "status": "verified", "strategy": "google_one_tap", "expire_at": 1615462399, "attempts": 1, "verified_at_client": "", "error": null}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 813862, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": 1622852400, "verified_at_client": null}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": ["", ""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": false, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://juicy-barracks.net", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 978454, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": false, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 637303, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Evalyn", "last_name": "Buckridge", "profile_image_url": "https://untried-knickers.name/", "image_url": "https://monumental-yogurt.name/", "has_image": true, "identifier": "", "username": "Hollis45", "banned": false, "deprovisioned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": false, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 830110, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} DeleteUserProfileImage: @@ -6231,7 +6516,7 @@ examples: user_id: "usr_test123" responses: "200": - application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "zh", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": null, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 2, "expire_at": 1622852400, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 0, "expire_at": 1620000000, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": null, "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 494195, "external_accounts": [{"object": "google_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Leda.Howell23@hotmail.com", "email_address_verified": true, "first_name": "Georgette", "last_name": "Veum", "image_url": "https://wobbly-allocation.biz/", "username": "Clifford88", "phone_number": "920.998.6934", "public_metadata": {"key": "", "key1": ""}, "label": "", "created_at": 355458, "updated_at": 464532, "verification": {"object": "verification_oauth", "status": "verified", "strategy": "oauth_google", "external_verification_redirect_url": "https://oauth.google.com/verify", "error": null, "expire_at": 1615462399, "attempts": 1, "verified_at_client": ""}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 169267, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_saml", "status": "verified", "strategy": "saml", "external_verification_redirect_url": "https://unwieldy-place.biz", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 32121, "attempts": null, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "oauth", "provider": "", "active": true, "email_address": "Derek_Volkman@hotmail.com", "first_name": "Gianni", "last_name": "Balistreri", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": "", "key1": "", "key2": ""}, "verification": {"object": "verification_ticket", "status": "expired", "strategy": "ticket", "attempts": null, "expire_at": 132240, "verified_at_client": ""}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://scented-poppy.name", "domains": [""], "active": true, "sync_user_attributes": false, "allow_subdomains": true, "allow_idp_initiated": false, "disable_additional_identifications": false, "created_at": 219490, "updated_at": 680799}, "last_authenticated_at": 345760}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://acclaimed-charm.org", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 892410, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 756848, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Alf", "last_name": "Lockman", "profile_image_url": "https://ornate-pliers.biz", "image_url": "https://variable-punctuation.name", "has_image": true, "identifier": "", "username": "Jessie.Hermann22", "banned": false, "deprovisioned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 776566, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": true, "external_id": ""}} + application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "zh", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": null, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 2, "expire_at": 1622852400, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 0, "expire_at": 1620000000, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": null, "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 494195, "external_accounts": [{"object": "google_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Leda.Howell23@hotmail.com", "email_address_verified": true, "first_name": "Georgette", "last_name": "Veum", "image_url": "https://wobbly-allocation.biz/", "username": "Clifford88", "phone_number": "920.998.6934", "public_metadata": {"key": "", "key1": ""}, "label": "", "created_at": 355458, "updated_at": 464532, "verification": {"object": "verification_oauth", "status": "verified", "strategy": "oauth_google", "external_verification_redirect_url": "https://oauth.google.com/verify", "error": null, "expire_at": 1615462399, "attempts": 1, "verified_at_client": ""}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 169267, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_saml", "status": "verified", "strategy": "saml", "external_verification_redirect_url": "https://unwieldy-place.biz", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 32121, "attempts": null, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "oauth", "provider": "", "active": true, "email_address": "Derek_Volkman@hotmail.com", "first_name": "Gianni", "last_name": "Balistreri", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": "", "key1": "", "key2": ""}, "verification": {"object": "verification_ticket", "status": "expired", "strategy": "ticket", "attempts": null, "expire_at": 132240, "verified_at_client": ""}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://scented-poppy.name", "domains": [""], "active": true, "sync_user_attributes": false, "allow_subdomains": true, "allow_idp_initiated": false, "disable_additional_identifications": false, "created_at": 219490, "updated_at": 680799}, "last_authenticated_at": 345760}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://acclaimed-charm.org", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 892410, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 756848, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Alf", "last_name": "Lockman", "profile_image_url": "https://ornate-pliers.biz", "image_url": "https://variable-punctuation.name", "has_image": true, "identifier": "", "username": "Jessie.Hermann22", "banned": false, "deprovisioned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 776566, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": true, "external_id": ""}} "404": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} UpdateUserMetadata: @@ -6243,7 +6528,7 @@ examples: application/json: {"public_metadata": {"key": ""}, "private_metadata": {"key": "", "key1": ""}, "unsafe_metadata": {"key": "", "key1": ""}} responses: "200": - application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "ja", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "email_code", "attempts": null, "expire_at": null, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 2, "expire_at": 1622852400, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": null, "expire_at": null, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 387811, "external_accounts": [{"object": "google_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Sherman_Stanton@yahoo.com", "email_address_verified": true, "first_name": "Kristian", "last_name": "Bartell", "image_url": "https://ecstatic-juggernaut.org", "username": "Alayna_McLaughlin", "phone_number": "1-281-985-7838 x38866", "public_metadata": {"key": ""}, "label": "", "created_at": 24797, "updated_at": 885925, "verification": {"object": "verification_google_one_tap", "status": "verified", "strategy": "google_one_tap", "expire_at": 1615462399, "attempts": 1, "verified_at_client": "", "error": null}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 849797, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_saml", "status": "verified", "strategy": "saml", "external_verification_redirect_url": null, "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 613304, "attempts": null, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": false, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://harmful-thorn.com", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 898302, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 887368, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Mya", "last_name": "Torphy", "profile_image_url": "https://sudden-onset.name", "image_url": "https://each-alliance.org", "has_image": false, "identifier": "", "username": "Zella.Bahringer", "banned": true, "deprovisioned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 466423, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} + application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "ja", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "email_code", "attempts": null, "expire_at": null, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 2, "expire_at": 1622852400, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": null, "expire_at": null, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 387811, "external_accounts": [{"object": "google_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Sherman_Stanton@yahoo.com", "email_address_verified": true, "first_name": "Kristian", "last_name": "Bartell", "image_url": "https://ecstatic-juggernaut.org", "username": "Alayna_McLaughlin", "phone_number": "1-281-985-7838 x38866", "public_metadata": {"key": ""}, "label": "", "created_at": 24797, "updated_at": 885925, "verification": {"object": "verification_google_one_tap", "status": "verified", "strategy": "google_one_tap", "expire_at": 1615462399, "attempts": 1, "verified_at_client": "", "error": null}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 849797, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_saml", "status": "verified", "strategy": "saml", "external_verification_redirect_url": null, "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 613304, "attempts": null, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": false, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://harmful-thorn.com", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 898302, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 887368, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Mya", "last_name": "Torphy", "profile_image_url": "https://sudden-onset.name", "image_url": "https://each-alliance.org", "has_image": false, "identifier": "", "username": "Zella.Bahringer", "banned": true, "deprovisioned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 466423, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} GetOAuthAccessToken: @@ -6271,7 +6556,7 @@ examples: offset: 10 responses: "200": - application/json: {"data": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://whispered-brook.name", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 103562, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 826534, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Kyler", "last_name": "Schulist", "profile_image_url": "https://babyish-substitution.net", "image_url": "https://nutritious-sarong.net", "has_image": false, "identifier": "", "username": "Victoria19", "banned": false, "deprovisioned": false}, "created_at": 1625078400, "updated_at": 1625164800}, {"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://sick-signature.biz/", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 103562, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 961178, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Kyler", "last_name": "Schulist", "profile_image_url": "https://babyish-substitution.net", "image_url": "https://nutritious-sarong.net", "has_image": false, "identifier": "", "username": "Eloise76", "banned": false, "deprovisioned": false}, "created_at": 1625078400, "updated_at": 1625164800}, {"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://tricky-riser.org/", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 103562, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 103562, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Kyler", "last_name": "Schulist", "profile_image_url": "https://babyish-substitution.net", "image_url": "https://nutritious-sarong.net", "has_image": false, "identifier": "", "username": "Orland_Schmidt", "banned": true, "deprovisioned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "total_count": 1} + application/json: {"data": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://whispered-brook.name", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 103562, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": false, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 826534, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Kyler", "last_name": "Schulist", "profile_image_url": "https://babyish-substitution.net", "image_url": "https://nutritious-sarong.net", "has_image": false, "identifier": "", "username": "Victoria19", "banned": false, "deprovisioned": false}, "created_at": 1625078400, "updated_at": 1625164800}, {"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://sick-signature.biz/", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 103562, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": false, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 961178, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Kyler", "last_name": "Schulist", "profile_image_url": "https://babyish-substitution.net", "image_url": "https://nutritious-sarong.net", "has_image": false, "identifier": "", "username": "Eloise76", "banned": false, "deprovisioned": false}, "created_at": 1625078400, "updated_at": 1625164800}, {"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://tricky-riser.org/", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 103562, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 103562, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Kyler", "last_name": "Schulist", "profile_image_url": "https://babyish-substitution.net", "image_url": "https://nutritious-sarong.net", "has_image": false, "identifier": "", "username": "Orland_Schmidt", "banned": true, "deprovisioned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "total_count": 1} "403": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} UsersGetOrganizationInvitations: @@ -6396,7 +6681,7 @@ examples: offset: 10 responses: "200": - application/json: {"data": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://inexperienced-fort.net/", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 359131, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 385136, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Eva", "last_name": "Spinka", "profile_image_url": "https://unlucky-arcade.org/", "image_url": "https://warmhearted-someplace.info/", "has_image": true, "identifier": "", "username": "Harvey.Russel", "banned": true, "deprovisioned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "total_count": 1} + application/json: {"data": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://inexperienced-fort.net/", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 359131, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 385136, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Eva", "last_name": "Spinka", "profile_image_url": "https://unlucky-arcade.org/", "image_url": "https://warmhearted-someplace.info/", "has_image": true, "identifier": "", "username": "Harvey.Russel", "banned": true, "deprovisioned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "total_count": 1} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} "500": @@ -6643,14 +6928,14 @@ examples: speakeasy-default-list-domains: responses: "200": - application/json: {"data": [{"object": "domain", "id": "domain_id", "name": "example.com", "is_satellite": false, "frontend_api_url": "https://frontend.example.com", "accounts_portal_url": null, "proxy_url": null, "development_origin": "http://localhost:3000", "cname_targets": [{"host": "example-host.clerk.com", "value": "example-value.clerk.services", "required": true}]}, {"object": "domain", "id": "domain_id", "name": "example.com", "is_satellite": false, "frontend_api_url": "https://frontend.example.com", "accounts_portal_url": null, "proxy_url": null, "development_origin": "http://localhost:3000", "cname_targets": [{"host": "example-host.clerk.com", "value": "example-value.clerk.services", "required": true}]}, {"object": "domain", "id": "domain_id", "name": "example.com", "is_satellite": false, "frontend_api_url": "https://frontend.example.com", "accounts_portal_url": null, "proxy_url": null, "development_origin": "http://localhost:3000", "cname_targets": [{"host": "example-host.clerk.com", "value": "example-value.clerk.services", "required": true}]}], "total_count": 1} + application/json: {"data": [{"object": "domain", "id": "domain_id", "name": "example.com", "is_satellite": false, "frontend_api_url": "https://frontend.example.com", "accounts_portal_url": null, "proxy_url": null, "development_origin": "http://localhost:3000", "cname_targets": [{"host": "example-host.clerk.com", "value": "example-value.clerk.services", "required": true}], "dns_targets": [{"host": "sinful-window.net", "value": "", "record_type": "CNAME", "automation_disposition": "already_satisfied", "required": false}]}, {"object": "domain", "id": "domain_id", "name": "example.com", "is_satellite": false, "frontend_api_url": "https://frontend.example.com", "accounts_portal_url": null, "proxy_url": null, "development_origin": "http://localhost:3000", "cname_targets": [{"host": "example-host.clerk.com", "value": "example-value.clerk.services", "required": true}], "dns_targets": [{"host": "sinful-window.net", "value": "", "record_type": "CNAME", "automation_disposition": "already_satisfied", "required": false}]}, {"object": "domain", "id": "domain_id", "name": "example.com", "is_satellite": false, "frontend_api_url": "https://frontend.example.com", "accounts_portal_url": null, "proxy_url": null, "development_origin": "http://localhost:3000", "cname_targets": [{"host": "example-host.clerk.com", "value": "example-value.clerk.services", "required": true}], "dns_targets": [{"host": "sinful-window.net", "value": "", "record_type": "CNAME", "automation_disposition": "already_satisfied", "required": false}]}], "total_count": 1} AddDomain: speakeasy-default-add-domain: requestBody: application/json: {"name": "example.com", "is_satellite": true, "proxy_url": "https://proxy.example.com"} responses: "200": - application/json: {"object": "domain", "id": "domain_id", "name": "example.com", "is_satellite": false, "frontend_api_url": "https://frontend.example.com", "accounts_portal_url": null, "proxy_url": null, "development_origin": "http://localhost:3000", "cname_targets": [{"host": "example-host.clerk.com", "value": "example-value.clerk.services", "required": true}]} + application/json: {"object": "domain", "id": "domain_id", "name": "example.com", "is_satellite": false, "frontend_api_url": "https://frontend.example.com", "accounts_portal_url": null, "proxy_url": null, "development_origin": "http://localhost:3000", "cname_targets": [{"host": "example-host.clerk.com", "value": "example-value.clerk.services", "required": true}], "dns_targets": [{"host": "determined-devastation.net", "value": "", "record_type": "CNAME", "automation_disposition": "safe_to_create", "required": false}]} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} DeleteDomain: @@ -6672,18 +6957,18 @@ examples: application/json: {"name": "example.com", "proxy_url": "http://proxy.example.com", "is_secondary": false} responses: "200": - application/json: {"object": "domain", "id": "domain_id", "name": "example.com", "is_satellite": false, "frontend_api_url": "https://frontend.example.com", "accounts_portal_url": null, "proxy_url": null, "development_origin": "http://localhost:3000", "cname_targets": [{"host": "example-host.clerk.com", "value": "example-value.clerk.services", "required": true}]} + application/json: {"object": "domain", "id": "domain_id", "name": "example.com", "is_satellite": false, "frontend_api_url": "https://frontend.example.com", "accounts_portal_url": null, "proxy_url": null, "development_origin": "http://localhost:3000", "cname_targets": [{"host": "example-host.clerk.com", "value": "example-value.clerk.services", "required": true}], "dns_targets": [{"host": "tepid-formation.net", "value": "", "record_type": "CNAME", "automation_disposition": "manual_resolution_required", "required": true}]} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} GetInstance: speakeasy-default-get-instance: responses: "200": - application/json: {"object": "instance", "id": "", "environment_type": "development", "allowed_origins": ["http://localhost:3000", "https://some-domain"]} + application/json: {"object": "instance", "id": "", "environment_type": "development", "allowed_origins": ["http://localhost:3000", "https://some-domain"], "allowed_subdomains": ["app.example.com", "*.preview.example.com"], "subdomain_allowlist_enabled": false, "workspace_id": "org_2abc123def456"} UpdateInstance: speakeasy-default-update-instance: requestBody: - application/json: {"test_mode": true, "hibp": false, "support_email": "support@example.com", "clerk_js_version": "2.3.1", "development_origin": "http://localhost:3000", "allowed_origins": ["http://localhost:3000", "chrome-extension://extension_uiid", "capacitor://localhost"], "url_based_session_syncing": true, "preferred_sign_in_strategy_when_password_required": "password"} + application/json: {"test_mode": true, "hibp": false, "support_email": "support@example.com", "clerk_js_version": "2.3.1", "development_origin": "http://localhost:3000", "allowed_origins": ["http://localhost:3000", "chrome-extension://extension_uiid", "capacitor://localhost"], "allowed_subdomains": [""], "subdomain_allowlist_enabled": true, "url_based_session_syncing": true, "preferred_sign_in_strategy_when_password_required": "password"} responses: "422": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} @@ -6796,7 +7081,7 @@ examples: offset: 10 responses: "200": - application/json: {"data": [{"object": "organization", "id": "org_1234", "name": "Sample Organization", "slug": "acme-corp", "image_url": "https://light-lace.com/", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 42894, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 422920, "role_set_key": ""}], "total_count": 1} + application/json: {"data": [{"object": "organization", "id": "org_1234", "name": "Sample Organization", "slug": "acme-corp", "image_url": "https://light-lace.com/", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 42894, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 422920, "role_set_key": ""}], "total_count": 1} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} CreateOrganization: @@ -6805,7 +7090,7 @@ examples: application/json: {"name": "NewOrg", "created_by": "user_123", "private_metadata": {"internal_code": "ABC123"}, "public_metadata": {"public_event": "Annual Summit"}, "slug": "neworg", "max_allowed_memberships": 100, "created_at": "1718855032267", "role_set_key": ""} responses: "200": - application/json: {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://lighthearted-plugin.com", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 103232, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 657363, "role_set_key": ""} + application/json: {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://lighthearted-plugin.com", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 103232, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 657363, "role_set_key": ""} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} GetOrganization: @@ -6818,7 +7103,7 @@ examples: include_missing_member_with_elevated_permissions: false responses: "200": - application/json: {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://unripe-character.org", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 850270, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 540119, "role_set_key": ""} + application/json: {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://unripe-character.org", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 850270, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": false, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 540119, "role_set_key": ""} "403": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} UpdateOrganization: @@ -6827,10 +7112,10 @@ examples: path: organization_id: "org_123_update" requestBody: - application/json: {"name": "New Organization Name", "slug": "new-org-slug", "max_allowed_memberships": 100, "admin_delete_enabled": true, "created_at": "1720203056033", "role_set_key": ""} + application/json: {"name": "New Organization Name", "slug": "new-org-slug", "max_allowed_memberships": 100, "admin_delete_enabled": true, "self_serve_sso_enabled": false, "created_at": "1720203056033", "role_set_key": ""} responses: "200": - application/json: {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://medium-edge.org", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 950312, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 914329, "role_set_key": ""} + application/json: {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://medium-edge.org", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 950312, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": false, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 914329, "role_set_key": ""} "402": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} "400": @@ -6854,7 +7139,7 @@ examples: application/json: {"public_metadata": {"announcement": "We are opening a new office!"}, "private_metadata": {"internal_use_only": "Future plans discussion."}} responses: "200": - application/json: {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://frugal-fold.name", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 304001, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 612631, "role_set_key": ""} + application/json: {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://frugal-fold.name", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 304001, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 612631, "role_set_key": ""} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} UploadOrganizationLogo: @@ -6866,7 +7151,7 @@ examples: multipart/form-data: {"uploader_user_id": "user_67890", "file": "path/to/your/logo.png"} responses: "200": - application/json: {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://example.com/image_url.png", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 968142, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 888250, "role_set_key": ""} + application/json: {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://example.com/image_url.png", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 968142, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": false, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 888250, "role_set_key": ""} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} DeleteOrganizationLogo: @@ -6876,7 +7161,7 @@ examples: organization_id: "org_12345" responses: "200": - application/json: {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://thorough-jump.org", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 851332, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 746322, "role_set_key": ""} + application/json: {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://thorough-jump.org", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 851332, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": false, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 746322, "role_set_key": ""} "404": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} CreateOrganizationMembership: @@ -6888,7 +7173,7 @@ examples: application/json: {"user_id": "user_456", "role": "admin", "public_metadata": {"key": "", "key1": "", "key2": ""}, "private_metadata": {"key": "", "key1": "", "key2": ""}} responses: "200": - application/json: {"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://well-worn-nectarine.net", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 957199, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 758232, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Petra", "last_name": "Rath", "profile_image_url": "https://joyful-coal.net", "image_url": "https://nutritious-mentor.org/", "has_image": true, "identifier": "", "username": "Verner74", "banned": false, "deprovisioned": false}, "created_at": 1625078400, "updated_at": 1625164800} + application/json: {"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://well-worn-nectarine.net", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 957199, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": false, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 758232, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Petra", "last_name": "Rath", "profile_image_url": "https://joyful-coal.net", "image_url": "https://nutritious-mentor.org/", "has_image": true, "identifier": "", "username": "Verner74", "banned": false, "deprovisioned": false}, "created_at": 1625078400, "updated_at": 1625164800} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} ListOrganizationMemberships: @@ -6958,7 +7243,7 @@ examples: application/json: {"role": "admin"} responses: "200": - application/json: {"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://close-safe.com/", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 118368, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 496954, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Andy", "last_name": "Kiehn", "profile_image_url": "https://dependable-vol.com/", "image_url": "https://elastic-bar.net", "has_image": true, "identifier": "", "username": "Billy.Beier", "banned": true, "deprovisioned": true}, "created_at": 1625078400, "updated_at": 1625164800} + application/json: {"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://close-safe.com/", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 118368, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 496954, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Andy", "last_name": "Kiehn", "profile_image_url": "https://dependable-vol.com/", "image_url": "https://elastic-bar.net", "has_image": true, "identifier": "", "username": "Billy.Beier", "banned": true, "deprovisioned": true}, "created_at": 1625078400, "updated_at": 1625164800} "404": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} DeleteOrganizationMembership: @@ -6969,7 +7254,7 @@ examples: user_id: "user_67890" responses: "200": - application/json: {"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://unlawful-tarragon.net/", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 894012, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 195390, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Randy", "last_name": "DuBuque", "profile_image_url": null, "image_url": "https://misguided-airmail.info/", "has_image": true, "identifier": "", "username": "Skylar_Schulist79", "banned": true, "deprovisioned": true}, "created_at": 1625078400, "updated_at": 1625164800} + application/json: {"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://unlawful-tarragon.net/", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 894012, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": false, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 195390, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Randy", "last_name": "DuBuque", "profile_image_url": null, "image_url": "https://misguided-airmail.info/", "has_image": true, "identifier": "", "username": "Skylar_Schulist79", "banned": true, "deprovisioned": true}, "created_at": 1625078400, "updated_at": 1625164800} "401": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} UpdateOrganizationMembershipMetadata: @@ -6982,7 +7267,7 @@ examples: application/json: {"public_metadata": {}, "private_metadata": {}} responses: "200": - application/json: {"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://second-suv.org/", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 715347, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 121606, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": null, "last_name": "Ortiz", "profile_image_url": "https://uncomfortable-technician.name", "image_url": "https://unusual-roadway.biz", "has_image": false, "identifier": "", "username": "Micheal_Zieme66", "banned": true, "deprovisioned": true}, "created_at": 1625078400, "updated_at": 1625164800} + application/json: {"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://second-suv.org/", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 715347, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": false, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 121606, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": null, "last_name": "Ortiz", "profile_image_url": "https://uncomfortable-technician.name", "image_url": "https://unusual-roadway.biz", "has_image": false, "identifier": "", "username": "Micheal_Zieme66", "banned": true, "deprovisioned": true}, "created_at": 1625078400, "updated_at": 1625164800} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} CreateOrganizationDomain: @@ -7137,16 +7422,16 @@ examples: name_query: "" responses: "200": - application/json: {"data": [{"object": "oauth_application", "id": "oauth_app_1234", "instance_id": "instance_5678", "name": "Example OAuth App", "client_id": "client_12345", "client_uri": "https://kosher-volleyball.biz", "client_image_url": "https://exalted-impact.biz", "dynamically_registered": false, "consent_screen_enabled": true, "pkce_required": true, "public": false, "scopes": "profile email", "redirect_uris": [], "callback_url": "https://example.com/oauth/callback", "authorize_url": "https://example.com/authorize", "token_fetch_url": "https://example.com/oauth/token", "user_info_url": "https://example.com/userinfo", "discovery_url": "https://kosher-volleyball.biz", "token_introspection_url": "https://realistic-designation.info/", "created_at": 1609459200, "updated_at": 1612137600}], "total_count": 1} + application/json: {"data": [{"object": "oauth_application", "id": "oauth_app_1234", "instance_id": "instance_5678", "name": "Example OAuth App", "client_id": "client_12345", "client_uri": "https://kosher-volleyball.biz", "client_image_url": "https://exalted-impact.biz", "dynamically_registered": false, "consent_screen_enabled": true, "pkce_required": true, "device_authorization_grant_enabled": true, "public": false, "scopes": "profile email", "redirect_uris": [], "callback_url": "https://example.com/oauth/callback", "authorize_url": "https://example.com/authorize", "token_fetch_url": "https://example.com/oauth/token", "user_info_url": "https://example.com/userinfo", "discovery_url": "https://kosher-volleyball.biz", "token_introspection_url": "https://realistic-designation.info/", "created_at": 1609459200, "updated_at": 1612137600}], "total_count": 1} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} CreateOAuthApplication: speakeasy-default-create-O-auth-application: requestBody: - application/json: {"name": "Example App", "redirect_uris": [""], "scopes": "profile email public_metadata", "consent_screen_enabled": true, "pkce_required": false, "public": true} + application/json: {"name": "Example App", "redirect_uris": [""], "scopes": "profile email public_metadata", "consent_screen_enabled": true, "pkce_required": false, "device_authorization_grant_enabled": false, "public": true} responses: "200": - application/json: {"object": "oauth_application", "id": "oauth_app_1234", "instance_id": "instance_5678", "name": "Example OAuth App", "client_id": "client_12345", "client_uri": "https://familiar-sport.info/", "client_image_url": "https://colorful-collectivization.biz/", "dynamically_registered": false, "consent_screen_enabled": true, "pkce_required": true, "public": false, "scopes": "profile email", "redirect_uris": [""], "callback_url": "https://example.com/oauth/callback", "authorize_url": "https://example.com/authorize", "token_fetch_url": "https://example.com/oauth/token", "user_info_url": "https://example.com/userinfo", "discovery_url": "https://huge-guide.info", "token_introspection_url": "https://dazzling-elver.net/", "created_at": 1609459200, "updated_at": 1612137600, "client_secret": "secretXYZ123"} + application/json: {"object": "oauth_application", "id": "oauth_app_1234", "instance_id": "instance_5678", "name": "Example OAuth App", "client_id": "client_12345", "client_uri": "https://familiar-sport.info/", "client_image_url": "https://colorful-collectivization.biz/", "dynamically_registered": false, "consent_screen_enabled": true, "pkce_required": true, "device_authorization_grant_enabled": true, "public": false, "scopes": "profile email", "redirect_uris": [""], "callback_url": "https://example.com/oauth/callback", "authorize_url": "https://example.com/authorize", "token_fetch_url": "https://example.com/oauth/token", "user_info_url": "https://example.com/userinfo", "discovery_url": "https://huge-guide.info", "token_introspection_url": "https://dazzling-elver.net/", "created_at": 1609459200, "updated_at": 1612137600, "client_secret": "secretXYZ123"} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} GetOAuthApplication: @@ -7156,7 +7441,7 @@ examples: oauth_application_id: "oauth_app_12345" responses: "200": - application/json: {"object": "oauth_application", "id": "oauth_app_1234", "instance_id": "instance_5678", "name": "Example OAuth App", "client_id": "client_12345", "client_uri": "https://profitable-yin.name/", "client_image_url": "https://eminent-warming.com", "dynamically_registered": true, "consent_screen_enabled": true, "pkce_required": true, "public": false, "scopes": "profile email", "redirect_uris": [], "callback_url": "https://example.com/oauth/callback", "authorize_url": "https://example.com/authorize", "token_fetch_url": "https://example.com/oauth/token", "user_info_url": "https://example.com/userinfo", "discovery_url": "https://profitable-yin.name/", "token_introspection_url": "https://remorseful-declaration.org/", "created_at": 1609459200, "updated_at": 1612137600} + application/json: {"object": "oauth_application", "id": "oauth_app_1234", "instance_id": "instance_5678", "name": "Example OAuth App", "client_id": "client_12345", "client_uri": "https://profitable-yin.name/", "client_image_url": "https://eminent-warming.com", "dynamically_registered": true, "consent_screen_enabled": true, "pkce_required": true, "device_authorization_grant_enabled": true, "public": false, "scopes": "profile email", "redirect_uris": [], "callback_url": "https://example.com/oauth/callback", "authorize_url": "https://example.com/authorize", "token_fetch_url": "https://example.com/oauth/token", "user_info_url": "https://example.com/userinfo", "discovery_url": "https://profitable-yin.name/", "token_introspection_url": "https://remorseful-declaration.org/", "created_at": 1609459200, "updated_at": 1612137600} "403": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} UpdateOAuthApplication: @@ -7165,10 +7450,10 @@ examples: path: oauth_application_id: "oauth_app_67890" requestBody: - application/json: {"name": "Updated OAuth App Name", "redirect_uris": null, "scopes": "profile email public_metadata private_metadata", "consent_screen_enabled": null, "pkce_required": null, "public": null} + application/json: {"name": "Updated OAuth App Name", "redirect_uris": null, "scopes": "profile email public_metadata private_metadata", "consent_screen_enabled": null, "pkce_required": null, "device_authorization_grant_enabled": null, "public": null} responses: "200": - application/json: {"object": "oauth_application", "id": "oauth_app_1234", "instance_id": "instance_5678", "name": "Example OAuth App", "client_id": "client_12345", "client_uri": "https://grimy-saw.info", "client_image_url": "https://each-peninsula.name", "dynamically_registered": false, "consent_screen_enabled": false, "pkce_required": true, "public": false, "scopes": "profile email", "redirect_uris": [""], "callback_url": "https://example.com/oauth/callback", "authorize_url": "https://example.com/authorize", "token_fetch_url": "https://example.com/oauth/token", "user_info_url": "https://example.com/userinfo", "discovery_url": "https://grimy-saw.info", "token_introspection_url": "https://runny-curl.name", "created_at": 1609459200, "updated_at": 1612137600} + application/json: {"object": "oauth_application", "id": "oauth_app_1234", "instance_id": "instance_5678", "name": "Example OAuth App", "client_id": "client_12345", "client_uri": "https://grimy-saw.info", "client_image_url": "https://each-peninsula.name", "dynamically_registered": false, "consent_screen_enabled": false, "pkce_required": true, "device_authorization_grant_enabled": true, "public": false, "scopes": "profile email", "redirect_uris": [""], "callback_url": "https://example.com/oauth/callback", "authorize_url": "https://example.com/authorize", "token_fetch_url": "https://example.com/oauth/token", "user_info_url": "https://example.com/userinfo", "discovery_url": "https://grimy-saw.info", "token_introspection_url": "https://runny-curl.name", "created_at": 1609459200, "updated_at": 1612137600} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} DeleteOAuthApplication: @@ -7188,7 +7473,7 @@ examples: oauth_application_id: "oauth_application_12345" responses: "200": - application/json: {"object": "oauth_application", "id": "oauth_app_1234", "instance_id": "instance_5678", "name": "Example OAuth App", "client_id": "client_12345", "client_uri": "https://avaricious-puritan.name", "client_image_url": "https://ill-fated-sonar.com/", "dynamically_registered": true, "consent_screen_enabled": false, "pkce_required": true, "public": false, "scopes": "profile email", "redirect_uris": [], "callback_url": "https://example.com/oauth/callback", "authorize_url": "https://example.com/authorize", "token_fetch_url": "https://example.com/oauth/token", "user_info_url": "https://example.com/userinfo", "discovery_url": "https://avaricious-puritan.name", "token_introspection_url": "https://exalted-gown.net/", "created_at": 1609459200, "updated_at": 1612137600, "client_secret": "secretXYZ123"} + application/json: {"object": "oauth_application", "id": "oauth_app_1234", "instance_id": "instance_5678", "name": "Example OAuth App", "client_id": "client_12345", "client_uri": "https://avaricious-puritan.name", "client_image_url": "https://ill-fated-sonar.com/", "dynamically_registered": true, "consent_screen_enabled": false, "pkce_required": true, "device_authorization_grant_enabled": true, "public": false, "scopes": "profile email", "redirect_uris": [], "callback_url": "https://example.com/oauth/callback", "authorize_url": "https://example.com/authorize", "token_fetch_url": "https://example.com/oauth/token", "user_info_url": "https://example.com/userinfo", "discovery_url": "https://avaricious-puritan.name", "token_introspection_url": "https://exalted-gown.net/", "created_at": 1609459200, "updated_at": 1612137600, "client_secret": "secretXYZ123"} "403": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} ListSAMLConnections: @@ -7338,7 +7623,7 @@ examples: application/json: {"user_ids": ["", "", ""]} responses: "200": - application/json: [{"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "fi", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": 91086, "expire_at": 708739, "verified_at_client": null}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": true, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "reset_password_email_code", "attempts": 350529, "expire_at": 403378, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_web3", "status": "expired", "strategy": "web3_metamask_signature", "nonce": "", "message": "", "attempts": 38170, "expire_at": 791456, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": 959813, "expire_at": 33571, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 889326, "external_accounts": [{"object": "google_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Kelly90@yahoo.com", "email_address_verified": false, "first_name": "Eleazar", "last_name": "Labadie", "image_url": null, "username": null, "phone_number": "829.350.0802 x78343", "public_metadata": {"key": "", "key1": ""}, "label": "", "created_at": 15742, "updated_at": 356726, "verification": {"object": "verification_oauth", "status": "transferable", "strategy": "", "external_verification_redirect_url": "https://corny-elver.org", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 400231, "attempts": 698888, "verified_at_client": ""}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 433371, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": 236111, "expire_at": null, "verified_at_client": null}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domains": ["", "", ""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": false, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "oauth", "provider": "", "active": true, "email_address": "Melody48@gmail.com", "first_name": "Felicia", "last_name": "Jakubowski", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": ""}, "verification": {"object": "verification_oauth", "status": "unverified", "strategy": "", "external_verification_redirect_url": "https://measly-scratch.name/", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 878936, "attempts": 243637, "verified_at_client": null}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://dutiful-exasperation.name", "domains": ["", "", ""], "active": false, "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": false, "disable_additional_identifications": true, "created_at": 3029, "updated_at": 993605}, "last_authenticated_at": 803167}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://victorious-chow.name/", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 837086, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 62911, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Novella", "last_name": "Kuhn", "profile_image_url": "https://flawed-advertisement.info", "image_url": "https://concerned-traditionalism.org/", "has_image": true, "identifier": "", "username": "Fidel_Hahn", "banned": false, "deprovisioned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": false, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 378428, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": true, "external_id": null}}] + application/json: [{"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "fi", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": 91086, "expire_at": 708739, "verified_at_client": null}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": true, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "reset_password_email_code", "attempts": 350529, "expire_at": 403378, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_web3", "status": "expired", "strategy": "web3_metamask_signature", "nonce": "", "message": "", "attempts": 38170, "expire_at": 791456, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": 959813, "expire_at": 33571, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 889326, "external_accounts": [{"object": "google_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Kelly90@yahoo.com", "email_address_verified": false, "first_name": "Eleazar", "last_name": "Labadie", "image_url": null, "username": null, "phone_number": "829.350.0802 x78343", "public_metadata": {"key": "", "key1": ""}, "label": "", "created_at": 15742, "updated_at": 356726, "verification": {"object": "verification_oauth", "status": "transferable", "strategy": "", "external_verification_redirect_url": "https://corny-elver.org", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 400231, "attempts": 698888, "verified_at_client": ""}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 433371, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": 236111, "expire_at": null, "verified_at_client": null}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domains": ["", "", ""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": false, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "oauth", "provider": "", "active": true, "email_address": "Melody48@gmail.com", "first_name": "Felicia", "last_name": "Jakubowski", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": ""}, "verification": {"object": "verification_oauth", "status": "unverified", "strategy": "", "external_verification_redirect_url": "https://measly-scratch.name/", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 878936, "attempts": 243637, "verified_at_client": null}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://dutiful-exasperation.name", "domains": ["", "", ""], "active": false, "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": false, "disable_additional_identifications": true, "created_at": 3029, "updated_at": 993605}, "last_authenticated_at": 803167}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://victorious-chow.name/", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 837086, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": false, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 62911, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Novella", "last_name": "Kuhn", "profile_image_url": "https://flawed-advertisement.info", "image_url": "https://concerned-traditionalism.org/", "has_image": true, "identifier": "", "username": "Fidel_Hahn", "banned": false, "deprovisioned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": false, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 378428, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": true, "external_id": null}}] "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} UsersUnban: @@ -7347,7 +7632,7 @@ examples: application/json: {"user_ids": ["", "", ""]} responses: "200": - application/json: [{"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "pt", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 932013, "expire_at": 43591, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": true, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": null, "expire_at": 332407, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 794368, "expire_at": 602166, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": 872873, "expire_at": 160820, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 286479, "external_accounts": [{"object": "facebook_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Jermain_Kemmer64@yahoo.com", "email_address_verified": true, "first_name": "Loraine", "last_name": "Murray", "image_url": "https://good-natured-finding.name/", "username": "Alaina.Green64", "phone_number": "1-275-973-4414", "public_metadata": {}, "label": null, "created_at": 768653, "updated_at": 470874, "verification": {"object": "verification_google_one_tap", "status": "unverified", "strategy": "google_one_tap", "expire_at": 176015, "attempts": 486916, "verified_at_client": "", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 932013, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": 664797, "expire_at": 820435, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": false, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": true, "email_address": "Kristopher.Cummerata0@gmail.com", "first_name": "Esta", "last_name": "Ryan", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": "", "key1": ""}, "verification": {"object": "verification_oauth", "status": "unverified", "strategy": "", "external_verification_redirect_url": "https://free-coast.net", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 424998, "attempts": 787261, "verified_at_client": ""}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://corrupt-outlaw.biz", "domains": [], "active": true, "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": false, "disable_additional_identifications": true, "created_at": 513160, "updated_at": 288253}, "last_authenticated_at": 640467}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://pushy-celsius.com/", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 956546, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 770210, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Jade", "last_name": "Jones", "profile_image_url": "https://soft-instruction.biz/", "image_url": "https://esteemed-junior.biz", "has_image": false, "identifier": "", "username": "Lora_Koelpin", "banned": false, "deprovisioned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 294300, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}}] + application/json: [{"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "pt", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 932013, "expire_at": 43591, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": true, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": null, "expire_at": 332407, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 794368, "expire_at": 602166, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": 872873, "expire_at": 160820, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 286479, "external_accounts": [{"object": "facebook_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Jermain_Kemmer64@yahoo.com", "email_address_verified": true, "first_name": "Loraine", "last_name": "Murray", "image_url": "https://good-natured-finding.name/", "username": "Alaina.Green64", "phone_number": "1-275-973-4414", "public_metadata": {}, "label": null, "created_at": 768653, "updated_at": 470874, "verification": {"object": "verification_google_one_tap", "status": "unverified", "strategy": "google_one_tap", "expire_at": 176015, "attempts": 486916, "verified_at_client": "", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 932013, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": 664797, "expire_at": 820435, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": false, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": true, "email_address": "Kristopher.Cummerata0@gmail.com", "first_name": "Esta", "last_name": "Ryan", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": "", "key1": ""}, "verification": {"object": "verification_oauth", "status": "unverified", "strategy": "", "external_verification_redirect_url": "https://free-coast.net", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 424998, "attempts": 787261, "verified_at_client": ""}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://corrupt-outlaw.biz", "domains": [], "active": true, "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": false, "disable_additional_identifications": true, "created_at": 513160, "updated_at": 288253}, "last_authenticated_at": 640467}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://pushy-celsius.com/", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 956546, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 770210, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Jade", "last_name": "Jones", "profile_image_url": "https://soft-instruction.biz/", "image_url": "https://esteemed-junior.biz", "has_image": false, "identifier": "", "username": "Lora_Koelpin", "banned": false, "deprovisioned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 294300, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}}] "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} CreateMachineToken: @@ -7987,7 +8272,7 @@ examples: application/json: {"revoke_all_sessions": false} responses: "200": - application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "nl", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_saml", "status": "unverified", "strategy": "saml", "external_verification_redirect_url": "https://international-republican.name", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 937194, "attempts": null, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": true, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "expired", "strategy": "email_code", "attempts": 849046, "expire_at": 731894, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_web3", "status": "unverified", "strategy": "web3_coinbase_wallet_signature", "nonce": "", "message": "", "attempts": 322502, "expire_at": 189149, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": 879644, "expire_at": 428803, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 524831, "external_accounts": [{"object": "external_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Estevan77@gmail.com", "email_address_verified": true, "first_name": "Weldon", "last_name": "Crona", "image_url": "https://messy-labourer.biz", "username": "Hailey70", "phone_number": "816.308.8998 x634", "public_metadata": {"key": ""}, "label": "", "created_at": 585351, "updated_at": 7034, "verification": {"object": "verification_google_one_tap", "status": "verified", "strategy": "google_one_tap", "expire_at": null, "attempts": 533554, "verified_at_client": "", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 185269, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "unverified", "strategy": "ticket", "attempts": null, "expire_at": 851824, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": ["", ""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": true, "email_address": "Curt73@yahoo.com", "first_name": "Rocky", "last_name": "Leannon", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": "", "key1": ""}, "verification": {"object": "verification_ticket", "status": "expired", "strategy": "ticket", "attempts": 974369, "expire_at": 944397, "verified_at_client": ""}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://unlawful-carboxyl.name/", "domains": ["", ""], "active": true, "sync_user_attributes": false, "allow_subdomains": false, "allow_idp_initiated": false, "disable_additional_identifications": true, "created_at": 942812, "updated_at": 414300}, "last_authenticated_at": 821950}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://strange-sanity.name", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 794465, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 765692, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": null, "last_name": "Aufderhar", "profile_image_url": "https://fluffy-cannon.org", "image_url": "https://insignificant-coordination.com", "has_image": false, "identifier": "", "username": "Harry.Dare", "banned": true, "deprovisioned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": false, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": null, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} + application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "nl", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_saml", "status": "unverified", "strategy": "saml", "external_verification_redirect_url": "https://international-republican.name", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 937194, "attempts": null, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": true, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "expired", "strategy": "email_code", "attempts": 849046, "expire_at": 731894, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_web3", "status": "unverified", "strategy": "web3_coinbase_wallet_signature", "nonce": "", "message": "", "attempts": 322502, "expire_at": 189149, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": 879644, "expire_at": 428803, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 524831, "external_accounts": [{"object": "external_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Estevan77@gmail.com", "email_address_verified": true, "first_name": "Weldon", "last_name": "Crona", "image_url": "https://messy-labourer.biz", "username": "Hailey70", "phone_number": "816.308.8998 x634", "public_metadata": {"key": ""}, "label": "", "created_at": 585351, "updated_at": 7034, "verification": {"object": "verification_google_one_tap", "status": "verified", "strategy": "google_one_tap", "expire_at": null, "attempts": 533554, "verified_at_client": "", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 185269, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "unverified", "strategy": "ticket", "attempts": null, "expire_at": 851824, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": ["", ""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": true, "email_address": "Curt73@yahoo.com", "first_name": "Rocky", "last_name": "Leannon", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": "", "key1": ""}, "verification": {"object": "verification_ticket", "status": "expired", "strategy": "ticket", "attempts": 974369, "expire_at": 944397, "verified_at_client": ""}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://unlawful-carboxyl.name/", "domains": ["", ""], "active": true, "sync_user_attributes": false, "allow_subdomains": false, "allow_idp_initiated": false, "disable_additional_identifications": true, "created_at": 942812, "updated_at": 414300}, "last_authenticated_at": 821950}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://strange-sanity.name", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 794465, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": false, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 765692, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": null, "last_name": "Aufderhar", "profile_image_url": "https://fluffy-cannon.org", "image_url": "https://insignificant-coordination.com", "has_image": false, "identifier": "", "username": "Harry.Dare", "banned": true, "deprovisioned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": false, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": null, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} UnsetUserPasswordCompromised: @@ -7997,21 +8282,21 @@ examples: user_id: "" responses: "200": - application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "fr", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_from_oauth", "status": "verified", "strategy": "", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 321346, "attempts": 766720, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 742457, "expire_at": 679575, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 534833, "expire_at": null, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": null, "attempts": 167210, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 595629, "external_accounts": [{"object": "google_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Cheyanne2@hotmail.com", "email_address_verified": true, "first_name": "Melyna", "last_name": "Brekke", "image_url": "https://pure-produce.net/", "username": "Pink.Lowe72", "phone_number": "(707) 284-8366 x078", "public_metadata": {"key": "", "key1": ""}, "label": null, "created_at": 642361, "updated_at": 369447, "verification": {"object": "verification_oauth", "status": "transferable", "strategy": "", "external_verification_redirect_url": "https://minty-retention.info/", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 134967, "attempts": 451879, "verified_at_client": ""}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 491547, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "expired", "strategy": "ticket", "attempts": 298981, "expire_at": 242790, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "oauth", "provider": "", "active": true, "email_address": "Norene_Wunsch@hotmail.com", "first_name": "Malachi", "last_name": "Bergstrom", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": "", "key1": ""}, "verification": {"object": "verification_saml", "status": "expired", "strategy": "saml", "external_verification_redirect_url": "https://caring-siege.org", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 773041, "attempts": 938457, "verified_at_client": null}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://early-technologist.net", "domains": ["", ""], "active": true, "sync_user_attributes": false, "allow_subdomains": false, "allow_idp_initiated": false, "disable_additional_identifications": false, "created_at": 109175, "updated_at": 146161}, "last_authenticated_at": 616135}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://tattered-angle.name/", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 355072, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 746219, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Kenyon", "last_name": "Bogan", "profile_image_url": "https://faraway-papa.biz/", "image_url": "https://partial-pliers.com", "has_image": false, "identifier": "", "username": "Myah.Koepp", "banned": true, "deprovisioned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 149396, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} + application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "fr", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_from_oauth", "status": "verified", "strategy": "", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 321346, "attempts": 766720, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 742457, "expire_at": 679575, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 534833, "expire_at": null, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": null, "attempts": 167210, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 595629, "external_accounts": [{"object": "google_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Cheyanne2@hotmail.com", "email_address_verified": true, "first_name": "Melyna", "last_name": "Brekke", "image_url": "https://pure-produce.net/", "username": "Pink.Lowe72", "phone_number": "(707) 284-8366 x078", "public_metadata": {"key": "", "key1": ""}, "label": null, "created_at": 642361, "updated_at": 369447, "verification": {"object": "verification_oauth", "status": "transferable", "strategy": "", "external_verification_redirect_url": "https://minty-retention.info/", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 134967, "attempts": 451879, "verified_at_client": ""}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 491547, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "expired", "strategy": "ticket", "attempts": 298981, "expire_at": 242790, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "oauth", "provider": "", "active": true, "email_address": "Norene_Wunsch@hotmail.com", "first_name": "Malachi", "last_name": "Bergstrom", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": "", "key1": ""}, "verification": {"object": "verification_saml", "status": "expired", "strategy": "saml", "external_verification_redirect_url": "https://caring-siege.org", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 773041, "attempts": 938457, "verified_at_client": null}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://early-technologist.net", "domains": ["", ""], "active": true, "sync_user_attributes": false, "allow_subdomains": false, "allow_idp_initiated": false, "disable_additional_identifications": false, "created_at": 109175, "updated_at": 146161}, "last_authenticated_at": 616135}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://tattered-angle.name/", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 355072, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 746219, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Kenyon", "last_name": "Bogan", "profile_image_url": "https://faraway-papa.biz/", "image_url": "https://partial-pliers.com", "has_image": false, "identifier": "", "username": "Myah.Koepp", "banned": true, "deprovisioned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 149396, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} GetInstanceProtect: speakeasy-default-get-instance-protect: responses: "200": - application/json: {"object": "instance_protect", "rules_enabled": true, "specter_enabled": true, "checks_bypassed": true} + application/json: {"object": "instance_protect", "rules_enabled": true, "specter_enabled": true, "checks_bypassed": true, "checks_verified": true, "checks_exempt": true} UpdateInstanceProtect: speakeasy-default-update-instance-protect: requestBody: application/json: {"rules_enabled": true, "specter_enabled": true} responses: "200": - application/json: {"object": "instance_protect", "rules_enabled": false, "specter_enabled": false, "checks_bypassed": true} + application/json: {"object": "instance_protect", "rules_enabled": false, "specter_enabled": false, "checks_bypassed": true, "checks_verified": true, "checks_exempt": true} "422": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} CreateBulkWaitlistEntries: @@ -8173,14 +8458,14 @@ examples: speakeasy-default-get-instance-O-auth-application-settings: responses: "200": - application/json: {"object": "oauth_application_settings", "dynamic_oauth_client_registration": false, "default_scopes": ["", ""], "oauth_jwt_access_tokens": false, "client_id_metadata_documents_advertised": false, "client_id_metadata_documents_only_allow_pre_registered_clients": false, "client_id_metadata_documents_block_implicitly_allowed_clients": true} + application/json: {"object": "oauth_application_settings", "dynamic_oauth_client_registration": false, "default_scopes": ["", ""], "oauth_jwt_access_tokens": false, "aud_claim_enabled": false, "pkce_required": false, "client_id_metadata_documents_advertised": false, "client_id_metadata_documents_only_allow_pre_registered_clients": false, "client_id_metadata_documents_block_implicitly_allowed_clients": true} UpdateInstanceOAuthApplicationSettings: speakeasy-default-update-instance-O-auth-application-settings: requestBody: - application/json: {"dynamic_oauth_client_registration": false, "default_scopes": ["", "", ""], "oauth_jwt_access_tokens": true, "client_id_metadata_documents_advertised": true, "client_id_metadata_documents_only_allow_pre_registered_clients": false, "client_id_metadata_documents_block_implicitly_allowed_clients": false} + application/json: {"dynamic_oauth_client_registration": false, "default_scopes": ["", "", ""], "oauth_jwt_access_tokens": true, "aud_claim_enabled": false, "pkce_required": true, "client_id_metadata_documents_advertised": true, "client_id_metadata_documents_only_allow_pre_registered_clients": false, "client_id_metadata_documents_block_implicitly_allowed_clients": false} responses: "200": - application/json: {"object": "oauth_application_settings", "dynamic_oauth_client_registration": false, "default_scopes": [""], "oauth_jwt_access_tokens": false, "client_id_metadata_documents_advertised": false, "client_id_metadata_documents_only_allow_pre_registered_clients": false, "client_id_metadata_documents_block_implicitly_allowed_clients": true} + application/json: {"object": "oauth_application_settings", "dynamic_oauth_client_registration": false, "default_scopes": [""], "oauth_jwt_access_tokens": false, "aud_claim_enabled": false, "pkce_required": false, "client_id_metadata_documents_advertised": false, "client_id_metadata_documents_only_allow_pre_registered_clients": false, "client_id_metadata_documents_block_implicitly_allowed_clients": true} "422": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} GetOrganizationBillingCreditBalance: @@ -8238,16 +8523,16 @@ examples: active: false responses: "200": - application/json: {"data": [{"object": "enterprise_connection", "id": "", "name": "", "provider": "", "logo_public_url": "https://majestic-designation.info", "active": true, "domains": [], "organization_id": "", "sync_user_attributes": false, "disable_additional_identifications": true, "allow_organization_account_linking": false, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "multi_valued": false}], "saml_connection": {"id": "", "name": "", "idp_entity_id": "", "idp_sso_url": "https://milky-clamp.biz/", "idp_metadata_url": "https://vengeful-airbus.net/", "acs_url": "https://similar-annual.info/", "sp_entity_id": "", "sp_metadata_url": "https://suburban-lashes.net/", "active": false, "allow_idp_initiated": false, "allow_subdomains": false, "force_authn": false, "login_hint": {"mode": "custom_attribute", "source": ""}}, "oauth_config": {"id": "", "name": "", "provider_key": "", "client_id": "", "discovery_url": null, "auth_url": "https://close-case.com/", "token_url": "https://exotic-sport.info/", "user_info_url": "https://smoggy-character.biz/", "requires_pkce": false, "logo_public_url": "https://appropriate-caption.net", "created_at": 597158, "updated_at": 307702}, "created_at": 465910, "updated_at": 675758}], "total_count": 594925} + application/json: {"data": [{"object": "enterprise_connection", "id": "", "name": "", "provider": "", "logo_public_url": "https://majestic-designation.info", "active": true, "domains": [], "organization_id": "", "sync_user_attributes": false, "disable_additional_identifications": true, "allow_organization_account_linking": false, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "directory_path": "", "multi_valued": false}], "saml_connection": {"id": "", "name": "", "idp_entity_id": "", "idp_sso_url": "https://milky-clamp.biz/", "idp_metadata_url": "https://vengeful-airbus.net/", "acs_url": "https://similar-annual.info/", "sp_entity_id": "", "sp_metadata_url": "https://suburban-lashes.net/", "active": false, "allow_idp_initiated": false, "allow_subdomains": false, "force_authn": false, "login_hint": {"mode": "custom_attribute", "source": ""}}, "oauth_config": {"id": "", "name": "", "provider_key": "", "client_id": "", "discovery_url": null, "auth_url": "https://close-case.com/", "token_url": "https://exotic-sport.info/", "user_info_url": "https://smoggy-character.biz/", "requires_pkce": false, "logo_public_url": "https://appropriate-caption.net", "created_at": 597158, "updated_at": 307702}, "created_at": 465910, "updated_at": 675758}], "total_count": 594925} "402": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} CreateEnterpriseConnection: speakeasy-default-create-enterprise-connection: requestBody: - application/json: {"name": "", "provider": "saml_google", "domains": ["", ""], "organization_id": "", "allow_organization_account_linking": false, "active": true, "saml": null, "oidc": {"client_id": "", "client_secret": "", "discovery_url": "https://frugal-brush.org", "auth_url": "https://failing-epic.biz", "token_url": "https://outrageous-haircut.name/", "user_info_url": "https://adolescent-tooth.com", "requires_pkce": true}, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "multi_valued": true}]} + application/json: {"name": "", "provider": "saml_google", "domains": ["", ""], "organization_id": "", "allow_organization_account_linking": false, "active": true, "saml": null, "oidc": {"client_id": "", "client_secret": "", "discovery_url": "https://frugal-brush.org", "auth_url": "https://failing-epic.biz", "token_url": "https://outrageous-haircut.name/", "user_info_url": "https://adolescent-tooth.com", "requires_pkce": true}, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "directory_path": "", "multi_valued": true}]} responses: "201": - application/json: {"object": "enterprise_connection", "id": "", "name": "", "provider": "", "logo_public_url": "https://broken-atrium.net/", "active": false, "domains": ["", ""], "organization_id": "", "sync_user_attributes": true, "disable_additional_identifications": false, "allow_organization_account_linking": false, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "multi_valued": false}], "saml_connection": {"id": "", "name": "", "idp_entity_id": "", "idp_sso_url": "https://zealous-coal.info", "idp_metadata_url": "https://which-nudge.name/", "acs_url": "https://likely-decision.name", "sp_entity_id": "", "sp_metadata_url": "https://cheap-shoulder.biz/", "active": true, "allow_idp_initiated": false, "allow_subdomains": true, "force_authn": true, "login_hint": {"mode": "custom_attribute", "source": ""}}, "oauth_config": {"id": "", "name": "", "provider_key": "", "client_id": "", "discovery_url": "https://unruly-smoke.info", "auth_url": "https://personal-exasperation.com/", "token_url": "https://tense-director.biz", "user_info_url": "https://international-morbidity.info/", "requires_pkce": false, "logo_public_url": "https://rusty-flint.biz/", "created_at": 64076, "updated_at": 926778}, "created_at": 955421, "updated_at": 241609} + application/json: {"object": "enterprise_connection", "id": "", "name": "", "provider": "", "logo_public_url": "https://broken-atrium.net/", "active": false, "domains": ["", ""], "organization_id": "", "sync_user_attributes": true, "disable_additional_identifications": false, "allow_organization_account_linking": false, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "directory_path": "", "multi_valued": false}], "saml_connection": {"id": "", "name": "", "idp_entity_id": "", "idp_sso_url": "https://zealous-coal.info", "idp_metadata_url": "https://which-nudge.name/", "acs_url": "https://likely-decision.name", "sp_entity_id": "", "sp_metadata_url": "https://cheap-shoulder.biz/", "active": true, "allow_idp_initiated": false, "allow_subdomains": true, "force_authn": true, "login_hint": {"mode": "custom_attribute", "source": ""}}, "oauth_config": {"id": "", "name": "", "provider_key": "", "client_id": "", "discovery_url": "https://unruly-smoke.info", "auth_url": "https://personal-exasperation.com/", "token_url": "https://tense-director.biz", "user_info_url": "https://international-morbidity.info/", "requires_pkce": false, "logo_public_url": "https://rusty-flint.biz/", "created_at": 64076, "updated_at": 926778}, "created_at": 955421, "updated_at": 241609} "402": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} GetEnterpriseConnection: @@ -8257,7 +8542,7 @@ examples: enterprise_connection_id: "" responses: "200": - application/json: {"object": "enterprise_connection", "id": "", "name": "", "provider": "", "logo_public_url": null, "active": true, "domains": ["", "", ""], "organization_id": "", "sync_user_attributes": true, "disable_additional_identifications": false, "allow_organization_account_linking": false, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "multi_valued": true}], "saml_connection": {"id": "", "name": "", "idp_entity_id": "", "idp_sso_url": "https://glittering-retrospectivity.info/", "idp_metadata_url": "https://average-rosemary.org", "acs_url": "https://flawless-mortise.info", "sp_entity_id": "", "sp_metadata_url": "https://imaginative-bin.info", "active": true, "allow_idp_initiated": true, "allow_subdomains": true, "force_authn": true, "login_hint": {"mode": "email_address", "source": ""}}, "oauth_config": {"id": "", "name": "", "provider_key": "", "client_id": "", "discovery_url": "https://private-dead.com", "auth_url": "https://prestigious-cross-contamination.name/", "token_url": "https://glittering-retrospectivity.info/", "user_info_url": "https://average-rosemary.org", "requires_pkce": true, "logo_public_url": "https://trusty-management.name", "created_at": 606739, "updated_at": 578377}, "created_at": 958854, "updated_at": 973337} + application/json: {"object": "enterprise_connection", "id": "", "name": "", "provider": "", "logo_public_url": null, "active": true, "domains": ["", "", ""], "organization_id": "", "sync_user_attributes": true, "disable_additional_identifications": false, "allow_organization_account_linking": false, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "directory_path": "", "multi_valued": true}], "saml_connection": {"id": "", "name": "", "idp_entity_id": "", "idp_sso_url": "https://glittering-retrospectivity.info/", "idp_metadata_url": "https://average-rosemary.org", "acs_url": "https://flawless-mortise.info", "sp_entity_id": "", "sp_metadata_url": "https://imaginative-bin.info", "active": true, "allow_idp_initiated": true, "allow_subdomains": true, "force_authn": true, "login_hint": {"mode": "email_address", "source": ""}}, "oauth_config": {"id": "", "name": "", "provider_key": "", "client_id": "", "discovery_url": "https://private-dead.com", "auth_url": "https://prestigious-cross-contamination.name/", "token_url": "https://glittering-retrospectivity.info/", "user_info_url": "https://average-rosemary.org", "requires_pkce": true, "logo_public_url": "https://trusty-management.name", "created_at": 606739, "updated_at": 578377}, "created_at": 958854, "updated_at": 973337} "402": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} UpdateEnterpriseConnection: @@ -8266,10 +8551,10 @@ examples: path: enterprise_connection_id: "" requestBody: - application/json: {"name": "", "domains": null, "active": false, "sync_user_attributes": true, "disable_additional_identifications": true, "allow_organization_account_linking": true, "organization_id": "", "saml": {"name": "", "idp_entity_id": "", "idp_sso_url": "https://animated-experience.name/", "idp_certificate": "", "idp_metadata_url": "https://alert-atrium.com/", "idp_metadata": "", "attribute_mapping": {"user_id": "", "email_address": "Eula82@hotmail.com", "first_name": "Pierre", "last_name": "Hoeger"}, "allow_subdomains": false, "allow_idp_initiated": false, "force_authn": false, "login_hint": {"mode": "email_address", "source": ""}}, "oidc": {"client_id": "", "client_secret": "", "discovery_url": "https://excitable-vista.info", "auth_url": "https://obedient-pasta.org/", "token_url": "https://helpless-gradient.info/", "user_info_url": "https://neglected-chapel.name/", "requires_pkce": false}, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "multi_valued": false}]} + application/json: {"name": "", "domains": null, "active": false, "sync_user_attributes": true, "disable_additional_identifications": true, "allow_organization_account_linking": true, "organization_id": "", "saml": {"name": "", "idp_entity_id": "", "idp_sso_url": "https://animated-experience.name/", "idp_certificate": "", "idp_metadata_url": "https://alert-atrium.com/", "idp_metadata": "", "attribute_mapping": {"user_id": "", "email_address": "Eula82@hotmail.com", "first_name": "Pierre", "last_name": "Hoeger"}, "allow_subdomains": false, "allow_idp_initiated": false, "force_authn": false, "login_hint": {"mode": "email_address", "source": ""}}, "oidc": {"client_id": "", "client_secret": "", "discovery_url": "https://excitable-vista.info", "auth_url": "https://obedient-pasta.org/", "token_url": "https://helpless-gradient.info/", "user_info_url": "https://neglected-chapel.name/", "requires_pkce": false}, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "directory_path": "", "multi_valued": false}]} responses: "200": - application/json: {"object": "enterprise_connection", "id": "", "name": "", "provider": "", "logo_public_url": "https://hasty-ghost.info", "active": false, "domains": ["", "", ""], "organization_id": "", "sync_user_attributes": true, "disable_additional_identifications": true, "allow_organization_account_linking": false, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "multi_valued": true}], "saml_connection": {"id": "", "name": "", "idp_entity_id": "", "idp_sso_url": "https://pure-napkin.info", "idp_metadata_url": "https://immediate-coil.biz", "acs_url": "https://insecure-apricot.net/", "sp_entity_id": "", "sp_metadata_url": "https://spirited-zebra.info/", "active": false, "allow_idp_initiated": true, "allow_subdomains": true, "force_authn": false, "login_hint": {"mode": "email_address", "source": ""}}, "oauth_config": {"id": "", "name": "", "provider_key": "", "client_id": "", "discovery_url": null, "auth_url": "https://giving-devil.com/", "token_url": null, "user_info_url": "https://flustered-equal.biz", "requires_pkce": true, "logo_public_url": "https://genuine-depot.name", "created_at": 446746, "updated_at": 286855}, "created_at": 149468, "updated_at": 206027} + application/json: {"object": "enterprise_connection", "id": "", "name": "", "provider": "", "logo_public_url": "https://hasty-ghost.info", "active": false, "domains": ["", "", ""], "organization_id": "", "sync_user_attributes": true, "disable_additional_identifications": true, "allow_organization_account_linking": false, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "directory_path": "", "multi_valued": true}], "saml_connection": {"id": "", "name": "", "idp_entity_id": "", "idp_sso_url": "https://pure-napkin.info", "idp_metadata_url": "https://immediate-coil.biz", "acs_url": "https://insecure-apricot.net/", "sp_entity_id": "", "sp_metadata_url": "https://spirited-zebra.info/", "active": false, "allow_idp_initiated": true, "allow_subdomains": true, "force_authn": false, "login_hint": {"mode": "email_address", "source": ""}}, "oauth_config": {"id": "", "name": "", "provider_key": "", "client_id": "", "discovery_url": null, "auth_url": "https://giving-devil.com/", "token_url": null, "user_info_url": "https://flustered-equal.biz", "requires_pkce": true, "logo_public_url": "https://genuine-depot.name", "created_at": 446746, "updated_at": 286855}, "created_at": 149468, "updated_at": 206027} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} DeleteEnterpriseConnection: @@ -8315,7 +8600,7 @@ examples: application/json: {"public_metadata": {"key": "", "key1": "", "key2": ""}, "private_metadata": {"key": "", "key1": "", "key2": ""}, "unsafe_metadata": {"key": "", "key1": ""}} responses: "200": - application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "pl", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_email_link", "status": "expired", "strategy": "email_link", "attempts": null, "expire_at": 693476, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": true, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 504949, "expire_at": 922791, "verified_at_client": null}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_web3", "status": "failed", "strategy": "web3_okx_wallet_signature", "nonce": "", "message": null, "attempts": 620667, "expire_at": 159863, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": 708841, "expire_at": 794677, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 2134, "external_accounts": [{"object": "google_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Felicia.Franey@gmail.com", "email_address_verified": false, "first_name": "Tyree", "last_name": "Stanton", "image_url": null, "username": null, "phone_number": "575-677-3192 x56696", "public_metadata": {"key": ""}, "label": "", "created_at": 631730, "updated_at": 458574, "verification": {"object": "verification_google_one_tap", "status": "verified", "strategy": "google_one_tap", "expire_at": null, "attempts": 297711, "verified_at_client": null, "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 64754, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_saml", "status": "failed", "strategy": "saml", "external_verification_redirect_url": "https://colorless-commodity.com/", "error": null, "expire_at": 976035, "attempts": 922757, "verified_at_client": null}, "saml_connection": {"id": "", "name": "", "domains": [], "active": false, "provider": "", "sync_user_attributes": false, "allow_subdomains": true, "allow_idp_initiated": false, "disable_additional_identifications": true, "created_at": 336834, "updated_at": 189244}}], "enterprise_accounts": [], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://cautious-dash.com", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 405629, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 544169, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": null, "last_name": "Gleason", "profile_image_url": "https://kaleidoscopic-majority.biz/", "image_url": "https://swift-bungalow.info/", "has_image": true, "identifier": "", "username": "Agustin_Beahan", "banned": true, "deprovisioned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": false, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": null, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": true, "external_id": ""}} + application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "pl", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_email_link", "status": "expired", "strategy": "email_link", "attempts": null, "expire_at": 693476, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": true, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 504949, "expire_at": 922791, "verified_at_client": null}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_web3", "status": "failed", "strategy": "web3_okx_wallet_signature", "nonce": "", "message": null, "attempts": 620667, "expire_at": 159863, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": 708841, "expire_at": 794677, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 2134, "external_accounts": [{"object": "google_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Felicia.Franey@gmail.com", "email_address_verified": false, "first_name": "Tyree", "last_name": "Stanton", "image_url": null, "username": null, "phone_number": "575-677-3192 x56696", "public_metadata": {"key": ""}, "label": "", "created_at": 631730, "updated_at": 458574, "verification": {"object": "verification_google_one_tap", "status": "verified", "strategy": "google_one_tap", "expire_at": null, "attempts": 297711, "verified_at_client": null, "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 64754, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_saml", "status": "failed", "strategy": "saml", "external_verification_redirect_url": "https://colorless-commodity.com/", "error": null, "expire_at": 976035, "attempts": 922757, "verified_at_client": null}, "saml_connection": {"id": "", "name": "", "domains": [], "active": false, "provider": "", "sync_user_attributes": false, "allow_subdomains": true, "allow_idp_initiated": false, "disable_additional_identifications": true, "created_at": 336834, "updated_at": 189244}}], "enterprise_accounts": [], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://cautious-dash.com", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 405629, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": false, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 544169, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": null, "last_name": "Gleason", "profile_image_url": "https://kaleidoscopic-majority.biz/", "image_url": "https://swift-bungalow.info/", "has_image": true, "identifier": "", "username": "Agustin_Beahan", "banned": true, "deprovisioned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": false, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": null, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": true, "external_id": ""}} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} GetInstanceCommunication: @@ -8359,7 +8644,7 @@ examples: multipart/form-data: {"uploader_user_id": "", "file": "x-file: example.file"} responses: "200": - application/json: {"object": "oauth_application", "id": "oauth_app_1234", "instance_id": "instance_5678", "name": "Example OAuth App", "client_id": "client_12345", "client_uri": "https://private-hoof.info", "client_image_url": "https://honorable-cod.name", "dynamically_registered": true, "consent_screen_enabled": true, "pkce_required": true, "public": false, "scopes": "profile email", "redirect_uris": [], "callback_url": "https://example.com/oauth/callback", "authorize_url": "https://example.com/authorize", "token_fetch_url": "https://example.com/oauth/token", "user_info_url": "https://example.com/userinfo", "discovery_url": "https://mature-sport.biz", "token_introspection_url": "https://indolent-impact.biz/", "created_at": 1609459200, "updated_at": 1612137600} + application/json: {"object": "oauth_application", "id": "oauth_app_1234", "instance_id": "instance_5678", "name": "Example OAuth App", "client_id": "client_12345", "client_uri": "https://private-hoof.info", "client_image_url": "https://honorable-cod.name", "dynamically_registered": true, "consent_screen_enabled": true, "pkce_required": true, "device_authorization_grant_enabled": true, "public": false, "scopes": "profile email", "redirect_uris": [], "callback_url": "https://example.com/oauth/callback", "authorize_url": "https://example.com/authorize", "token_fetch_url": "https://example.com/oauth/token", "user_info_url": "https://example.com/userinfo", "discovery_url": "https://mature-sport.biz", "token_introspection_url": "https://indolent-impact.biz/", "created_at": 1609459200, "updated_at": 1612137600} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} createAdminPortalLinkToken: @@ -8480,7 +8765,7 @@ examples: application/json: {"public_metadata": {"key": ""}, "private_metadata": {"key": ""}} responses: "200": - application/json: {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://pleased-majority.biz", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 79800, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 695041, "role_set_key": ""} + application/json: {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://pleased-majority.biz", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 79800, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 695041, "role_set_key": ""} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} RemoveUserPassword: @@ -8492,7 +8777,7 @@ examples: application/json: {"sign_out_of_other_sessions": false} responses: "200": - application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "da", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_ticket", "status": "expired", "strategy": "ticket", "attempts": 770179, "expire_at": 488282, "verified_at_client": null}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": true, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "expired", "strategy": "phone_code", "attempts": 459169, "expire_at": 296779, "channel": null, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 2201, "expire_at": 767507, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": 721526, "expire_at": 713911, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 784832, "external_accounts": [{"object": "google_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Elise.Adams93@gmail.com", "email_address_verified": false, "first_name": "Melba", "last_name": "Nader", "image_url": "https://rotten-elevator.info", "username": "Malvina42", "phone_number": null, "public_metadata": {"key": ""}, "label": "", "created_at": 267559, "updated_at": 26527, "verification": {"object": "verification_google_one_tap", "status": "unverified", "strategy": "google_one_tap", "expire_at": 711477, "attempts": 637211, "verified_at_client": "", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 559680, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_saml", "status": "verified", "strategy": "saml", "external_verification_redirect_url": "https://ill-utilization.net", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 801500, "attempts": 855989, "verified_at_client": ""}, "saml_connection": {"id": "", "name": "", "domains": ["", ""], "active": true, "provider": "", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": false, "created_at": 700949, "updated_at": 226009}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "oauth", "provider": "", "active": true, "email_address": "Jettie_OKeefe23@gmail.com", "first_name": "Brigitte", "last_name": "Kuhn", "provider_user_id": "", "enterprise_connection_id": null, "public_metadata": {"key": "", "key1": "", "key2": ""}, "verification": {"object": "verification_oauth", "status": "failed", "strategy": "", "external_verification_redirect_url": "https://brilliant-aircraft.info/", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 229938, "attempts": 14155, "verified_at_client": ""}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://elliptical-asset.name/", "domains": ["", ""], "active": true, "sync_user_attributes": false, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 600819, "updated_at": 450749}, "last_authenticated_at": 53348}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://kooky-cellar.info", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 557669, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 221752, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Janie", "last_name": "Bode", "profile_image_url": "https://antique-warming.biz", "image_url": "https://powerless-drug.name/", "has_image": false, "identifier": null, "username": "Jany_Kohler", "banned": false, "deprovisioned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": false, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 765885, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} + application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "da", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_ticket", "status": "expired", "strategy": "ticket", "attempts": 770179, "expire_at": 488282, "verified_at_client": null}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": true, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "expired", "strategy": "phone_code", "attempts": 459169, "expire_at": 296779, "channel": null, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 2201, "expire_at": 767507, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": 721526, "expire_at": 713911, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 784832, "external_accounts": [{"object": "google_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Elise.Adams93@gmail.com", "email_address_verified": false, "first_name": "Melba", "last_name": "Nader", "image_url": "https://rotten-elevator.info", "username": "Malvina42", "phone_number": null, "public_metadata": {"key": ""}, "label": "", "created_at": 267559, "updated_at": 26527, "verification": {"object": "verification_google_one_tap", "status": "unverified", "strategy": "google_one_tap", "expire_at": 711477, "attempts": 637211, "verified_at_client": "", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 559680, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_saml", "status": "verified", "strategy": "saml", "external_verification_redirect_url": "https://ill-utilization.net", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 801500, "attempts": 855989, "verified_at_client": ""}, "saml_connection": {"id": "", "name": "", "domains": ["", ""], "active": true, "provider": "", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": false, "created_at": 700949, "updated_at": 226009}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "oauth", "provider": "", "active": true, "email_address": "Jettie_OKeefe23@gmail.com", "first_name": "Brigitte", "last_name": "Kuhn", "provider_user_id": "", "enterprise_connection_id": null, "public_metadata": {"key": "", "key1": "", "key2": ""}, "verification": {"object": "verification_oauth", "status": "failed", "strategy": "", "external_verification_redirect_url": "https://brilliant-aircraft.info/", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 229938, "attempts": 14155, "verified_at_client": ""}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://elliptical-asset.name/", "domains": ["", ""], "active": true, "sync_user_attributes": false, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 600819, "updated_at": 450749}, "last_authenticated_at": 53348}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://kooky-cellar.info", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 557669, "max_allowed_memberships": 300, "admin_delete_enabled": true, "self_serve_sso_enabled": false, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 221752, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Janie", "last_name": "Bode", "profile_image_url": "https://antique-warming.biz", "image_url": "https://powerless-drug.name/", "has_image": false, "identifier": null, "username": "Jany_Kohler", "banned": false, "deprovisioned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": false, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 765885, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} "500": @@ -8549,7 +8834,7 @@ examples: application/json: {"enterprise_connection_id": "", "name": "", "provider": "", "group_role_mappings": [{"scim_group_id": "", "scim_group_display_name": "", "role_id": "", "precedence": 919086}]} responses: "200": - application/json: {"object": "scim_directory", "id": "", "name": "", "enterprise_connection_id": "", "endpoint_url": "https://basic-kit.org/", "provider": "", "enabled": false, "group_role_mapping_enabled": false, "attribute_mapping": {}, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "multi_valued": true}], "api_key": "", "created_at": 648930, "updated_at": 581893} + application/json: {"object": "scim_directory", "id": "", "name": "", "enterprise_connection_id": "", "endpoint_url": "https://basic-kit.org/", "provider": "", "enabled": false, "group_role_mapping_enabled": false, "attribute_mapping": {}, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "directory_path": "", "multi_valued": true}], "api_key": "", "created_at": 648930, "updated_at": 581893} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} GetSCIMDirectory: @@ -8559,7 +8844,7 @@ examples: scim_directory_id: "" responses: "200": - application/json: {"object": "scim_directory", "id": "", "name": "", "enterprise_connection_id": "", "endpoint_url": "https://bogus-republican.net", "provider": "", "enabled": true, "group_role_mapping_enabled": false, "attribute_mapping": {"key": "", "key1": ""}, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "multi_valued": false}], "api_key": "", "created_at": 850702, "updated_at": 369207} + application/json: {"object": "scim_directory", "id": "", "name": "", "enterprise_connection_id": "", "endpoint_url": "https://bogus-republican.net", "provider": "", "enabled": true, "group_role_mapping_enabled": false, "attribute_mapping": {"key": "", "key1": ""}, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "directory_path": "", "multi_valued": false}], "api_key": "", "created_at": 850702, "updated_at": 369207} "401": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} UpdateSCIMDirectory: @@ -8571,7 +8856,7 @@ examples: application/json: {"name": "", "enabled": false, "provider": "", "attribute_mapping": {"key": "", "key1": "", "key2": ""}, "group_role_mapping_enabled": true} responses: "200": - application/json: {"object": "scim_directory", "id": "", "name": "", "enterprise_connection_id": "", "endpoint_url": "https://different-defendant.info", "provider": "", "enabled": false, "group_role_mapping_enabled": false, "attribute_mapping": {"key": "", "key1": "", "key2": ""}, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "multi_valued": false}], "api_key": "", "created_at": 291754, "updated_at": 731344} + application/json: {"object": "scim_directory", "id": "", "name": "", "enterprise_connection_id": "", "endpoint_url": "https://different-defendant.info", "provider": "", "enabled": false, "group_role_mapping_enabled": false, "attribute_mapping": {"key": "", "key1": "", "key2": ""}, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "directory_path": "", "multi_valued": false}], "api_key": "", "created_at": 291754, "updated_at": 731344} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} DeleteSCIMDirectory: @@ -8591,7 +8876,7 @@ examples: scim_directory_id: "" responses: "200": - application/json: {"object": "scim_directory", "id": "", "name": "", "enterprise_connection_id": "", "endpoint_url": "https://profitable-knitting.org/", "provider": "", "enabled": true, "group_role_mapping_enabled": false, "attribute_mapping": {"key": "", "key1": "", "key2": ""}, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "multi_valued": false}], "api_key": "", "created_at": 362606, "updated_at": 318452} + application/json: {"object": "scim_directory", "id": "", "name": "", "enterprise_connection_id": "", "endpoint_url": "https://profitable-knitting.org/", "provider": "", "enabled": true, "group_role_mapping_enabled": false, "attribute_mapping": {"key": "", "key1": "", "key2": ""}, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "directory_path": "", "multi_valued": false}], "api_key": "", "created_at": 362606, "updated_at": 318452} "401": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} ListSCIMGroupRoleMappings: @@ -8601,7 +8886,7 @@ examples: scim_directory_id: "" responses: "200": - application/json: {"data": [{"object": "scim_group_role_mapping", "id": "", "scim_directory_id": "", "scim_group_id": "", "scim_group_display_name": "", "role": {"object": "role", "id": "", "name": "", "key": "", "description": "wealthy whether an", "is_creator_eligible": false, "permissions": [{"object": "permission", "id": "", "name": "", "key": "", "description": "than definite faint opposite satisfy poetry", "type": "", "created_at": 639039, "updated_at": 305626}], "created_at": 421968, "updated_at": 503961}, "precedence": 81381, "created_at": 941376, "updated_at": 342874}], "total_count": 856874} + application/json: {"data": [{"object": "scim_group_role_mapping", "id": "", "scim_directory_id": "", "directory_id": "", "scim_group_id": "", "directory_group_id": "", "scim_group_display_name": "", "directory_group_display_name": "", "role": {"object": "role", "id": "", "name": "", "key": "", "description": "wealthy whether an", "is_creator_eligible": false, "permissions": [{"object": "permission", "id": "", "name": "", "key": "", "description": "than definite faint opposite satisfy poetry", "type": "", "created_at": 639039, "updated_at": 305626}], "created_at": 421968, "updated_at": 503961}, "precedence": 81381, "created_at": 941376, "updated_at": 342874}], "total_count": 856874} "401": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} CreateSCIMGroupRoleMapping: @@ -8613,7 +8898,7 @@ examples: application/json: {"scim_group_id": "", "role_id": "", "precedence": 722732} responses: "200": - application/json: {"object": "scim_group_role_mapping", "id": "", "scim_directory_id": "", "scim_group_id": "", "scim_group_display_name": "", "role": {"object": "role", "id": "", "name": "", "key": "", "description": "uproot mythology swill normal finally odd chatter goat now", "is_creator_eligible": false, "permissions": [{"object": "permission", "id": "", "name": "", "key": "", "description": "officially posh testimonial justly", "type": "", "created_at": 6436, "updated_at": 334648}], "created_at": 987686, "updated_at": 197434}, "precedence": 189216, "created_at": 980350, "updated_at": 187657} + application/json: {"object": "scim_group_role_mapping", "id": "", "scim_directory_id": "", "directory_id": "", "scim_group_id": "", "directory_group_id": "", "scim_group_display_name": "", "directory_group_display_name": "", "role": {"object": "role", "id": "", "name": "", "key": "", "description": "uproot mythology swill normal finally odd chatter goat now", "is_creator_eligible": false, "permissions": [{"object": "permission", "id": "", "name": "", "key": "", "description": "officially posh testimonial justly", "type": "", "created_at": 6436, "updated_at": 334648}], "created_at": 987686, "updated_at": 197434}, "precedence": 189216, "created_at": 980350, "updated_at": 187657} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} ReplaceSCIMGroupRoleMappings: @@ -8639,9 +8924,168 @@ examples: application/json: {"object": "scim_group_role_mapping", "id": "", "deleted": true} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} + ListUserBiometricCredentials: + speakeasy-default-list-user-biometric-credentials: + parameters: + path: + user_id: "" + responses: + "200": + application/json: {"data": [], "total_count": 727743} + "403": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} + "500": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} + RevokeUserBiometricCredential: + speakeasy-default-revoke-user-biometric-credential: + parameters: + path: + user_id: "" + biometric_credential_id: "" + responses: + "200": + application/json: {"object": "trusted_device", "id": "", "platform": "ios", "app_identifier": "", "name": "", "algorithm": "ES256", "status": "revoked", "created_at": 739992, "updated_at": 761385, "last_used_at": 801025, "revoked_at": 345361} + "403": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} + "500": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} + ApplyBillingSubscriptionItemDiscount: + speakeasy-default-apply-billing-subscription-item-discount: + parameters: + path: + subscription_item_id: "" + requestBody: + application/json: {"discount_id": ""} + responses: + "200": + application/json: {"object": "commerce_discount_redemption", "id": "", "subscription_item_id": "", "discount_id": "", "name": "", "source": "promo_code", "promo_code": "", "effect": "percentage", "percent_off": 8707.67, "amount_off": {"amount": 829824, "amount_formatted": "", "currency": "Namibia Dollar", "currency_symbol": "Ft"}, "amount": {"amount": 134103, "amount_formatted": "", "currency": "CFA Franc BEAC", "currency_symbol": "Lek"}, "cycles_remaining": 627967, "cycles_applied": 427237, "status": "active", "redeemed_at": 966645, "redeemed_by": ""} + "400": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} + "500": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} + RemoveBillingSubscriptionItemDiscount: + speakeasy-default-remove-billing-subscription-item-discount: + parameters: + path: + subscription_item_id: "" + discount_id: "" + responses: + "200": + application/json: {"object": "commerce_discount_redemption", "id": "", "subscription_item_id": "", "discount_id": "", "name": "", "source": "promotion", "promo_code": "", "effect": "percentage", "percent_off": 4330.32, "amount_off": {"amount": 982770, "amount_formatted": "", "currency": "Boliviano boliviano", "currency_symbol": "₨"}, "amount": {"amount": 354055, "amount_formatted": "", "currency": "Zimbabwe Dollar", "currency_symbol": "£"}, "cycles_remaining": 278946, "cycles_applied": 514152, "status": "removed", "redeemed_at": 587238, "redeemed_by": ""} + "400": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} + "500": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} + ListDirectories: + speakeasy-default-list-directories: + parameters: + query: + limit: 20 + offset: 10 + responses: + "200": + application/json: {"data": [], "total_count": 816058} + "401": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} + CreateDirectory: + speakeasy-default-create-directory: + requestBody: + application/json: {"enterprise_connection_id": "", "name": "", "provider": "", "group_role_mappings": [{"directory_group_id": "", "scim_group_id": "", "directory_group_display_name": "", "scim_group_display_name": "", "role_id": "", "precedence": 68591}]} + responses: + "200": + application/json: {"object": "directory", "id": "", "name": "", "enterprise_connection_id": "", "endpoint_url": "https://splendid-reboot.org", "provider": "", "enabled": false, "group_role_mapping_enabled": false, "attribute_mapping": {"key": "", "key1": "", "key2": ""}, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "directory_path": "", "multi_valued": false}], "api_key": "", "created_at": 104115, "updated_at": 395765} + "400": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} + GetDirectory: + speakeasy-default-get-directory: + parameters: + path: + directory_id: "" + responses: + "200": + application/json: {"object": "directory", "id": "", "name": "", "enterprise_connection_id": "", "endpoint_url": "https://sinful-instruction.net", "provider": "", "enabled": true, "group_role_mapping_enabled": false, "attribute_mapping": {}, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "directory_path": "", "multi_valued": false}], "api_key": "", "created_at": 535839, "updated_at": 159125} + "401": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} + UpdateDirectory: + speakeasy-default-update-directory: + parameters: + path: + directory_id: "" + requestBody: + application/json: {"name": "", "enabled": true, "provider": "", "attribute_mapping": {"key": ""}, "group_role_mapping_enabled": true} + responses: + "200": + application/json: {"object": "directory", "id": "", "name": "", "enterprise_connection_id": "", "endpoint_url": "https://yummy-allegation.info/", "provider": "", "enabled": false, "group_role_mapping_enabled": false, "attribute_mapping": {"key": "", "key1": ""}, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "directory_path": "", "multi_valued": true}], "api_key": "", "created_at": 1157, "updated_at": 886767} + "400": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} + DeleteDirectory: + speakeasy-default-delete-directory: + parameters: + path: + directory_id: "" + responses: + "200": + application/json: {"object": "deleted_object", "id": "deleted_object_id_example", "slug": "deleted-object-slug", "deleted": true, "external_id": ""} + "401": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} + RotateDirectoryAPIKey: + speakeasy-default-rotate-directory-API-key: + parameters: + path: + directory_id: "" + responses: + "200": + application/json: {"object": "directory", "id": "", "name": "", "enterprise_connection_id": "", "endpoint_url": "https://growing-settler.info", "provider": "", "enabled": true, "group_role_mapping_enabled": true, "attribute_mapping": {}, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "directory_path": "", "multi_valued": true}], "api_key": "", "created_at": 750994, "updated_at": 235220} + "401": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} + ListDirectoryGroupRoleMappings: + speakeasy-default-list-directory-group-role-mappings: + parameters: + path: + directory_id: "" + responses: + "200": + application/json: {"data": [{"object": "directory_group_role_mapping", "id": "", "directory_id": "", "scim_directory_id": "", "directory_group_id": "", "scim_group_id": "", "directory_group_display_name": "", "scim_group_display_name": "", "role": {"object": "role", "id": "", "name": "", "key": "", "description": "depute descendant space defrag furthermore exaggerate magnificent because anenst", "is_creator_eligible": true, "permissions": [{"object": "permission", "id": "", "name": "", "key": "", "description": "ew bolster hygienic outgoing respectful metabolise zowie sleet", "type": "", "created_at": 498265, "updated_at": 710887}], "created_at": 350919, "updated_at": 637872}, "precedence": 646246, "created_at": 513068, "updated_at": 503605}], "total_count": 404468} + "401": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} + CreateDirectoryGroupRoleMapping: + speakeasy-default-create-directory-group-role-mapping: + parameters: + path: + directory_id: "" + requestBody: + application/json: {"directory_group_id": "", "scim_group_id": "", "role_id": "", "precedence": 213856} + responses: + "200": + application/json: {"object": "directory_group_role_mapping", "id": "", "directory_id": "", "scim_directory_id": "", "directory_group_id": "", "scim_group_id": "", "directory_group_display_name": "", "scim_group_display_name": "", "role": {"object": "role", "id": "", "name": "", "key": "", "description": "antique where consequently galoshes inside elementary wound", "is_creator_eligible": false, "permissions": [], "created_at": 217876, "updated_at": 164529}, "precedence": 529686, "created_at": 362403, "updated_at": 830502} + "400": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} + ReplaceDirectoryGroupRoleMappings: + speakeasy-default-replace-directory-group-role-mappings: + parameters: + path: + directory_id: "" + requestBody: + application/json: {"mappings": [{"directory_group_id": "", "scim_group_id": "", "role_id": ""}]} + responses: + "200": + application/json: {"data": [{"object": "directory_group_role_mapping", "id": "", "directory_id": "", "scim_directory_id": "", "directory_group_id": "", "scim_group_id": "", "directory_group_display_name": "", "scim_group_display_name": "", "role": {"object": "role", "id": "", "name": "", "key": "", "description": "rudely proofread hospitable awkwardly defiantly immediately aha by tail till", "is_creator_eligible": false, "permissions": [], "created_at": 916663, "updated_at": 49018}, "precedence": 633124, "created_at": 379114, "updated_at": 575478}], "total_count": 202595} + "400": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} + DeleteDirectoryGroupRoleMapping: + speakeasy-default-delete-directory-group-role-mapping: + parameters: + path: + directory_id: "" + mapping_id: "" + responses: + "200": + application/json: {"object": "directory_group_role_mapping", "id": "", "deleted": true} + "400": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} examplesVersion: 1.0.2 generatedTests: {} -releaseNotes: "## Python SDK Changes:\n* `clerk.instance_settings.get_organization_settings()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.users.get_organization_memberships()`: \n * `response.data[].public_user_data.deprovisioned` **Added**\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.clients.get()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.email_addresses.create()`: \n * `request.notify_primary_email_address_changed` **Added**\n * `response.verification` **Changed** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.email_addresses.get()`: \n * `response.verification` **Changed** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.role_sets.replace_role()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.role_sets.add_roles()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.role_sets.replace()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.role_sets.update()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.role_sets.get()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.role_sets.create()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.role_sets.list()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_permissions.delete()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_permissions.update()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.email_addresses.delete()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.email_addresses.update()`: \n * `request.notify_primary_email_address_changed` **Added**\n * `response.verification` **Changed** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.email_addresses.prepare_verification()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.email_addresses.attempt_verification()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.email_addresses.replace_for_user()`: \n * `request` **Changed**\n * `response.verification` **Changed** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.instance_settings.update_o_auth_application_settings()`: \n * `request` **Changed**\n * `response` **Changed**\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.phone_numbers.get()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.phone_numbers.delete()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.phone_numbers.update()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.phone_numbers.prepare_verification()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.phone_numbers.attempt_verification()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.phone_numbers.replace_for_user()`: \n * `request.identification_status.enum(unverified)` **Added**\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.sessions.list()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.sessions.create()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.sessions.get()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.sessions.refresh()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.sessions.revoke()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.sessions.create_token()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.sessions.create_token_from_template()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.email_sms_templates.list()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.email_sms_templates.get()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.email_sms_templates.revert()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.email_sms_templates.toggle_template_delivery()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.email_and_sms_templates.upsert()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.templates.preview()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.users.list()`: \n * `response.[]` **Changed** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.users.create()`: \n * `response` **Changed** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.users.count()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.users.get()`: \n * `response` **Changed** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.users.update()`: \n * `response` **Changed** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.users.delete()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.users.ban()`: \n * `response` **Changed** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.users.unban()`: \n * `response` **Changed** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.users.bulk_ban()`: \n * `response.[]` **Changed** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.users.bulk_unban()`: \n * `response.[]` **Changed** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.users.lock()`: \n * `response` **Changed** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.users.unlock()`: \n * `response` **Changed** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.users.set_profile_image()`: \n * `response` **Changed** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.users.delete_profile_image()`: \n * `response` **Changed** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.users.update_metadata()`: \n * `response` **Changed** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.users.replace_metadata()`: \n * `response` **Changed** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.users.get_billing_subscription()`: \n * `response.subscription_items[].payment_method.payment_type.enum(payer_credits)` **Added** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.users.get_billing_credit_balance()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.users.adjust_billing_credit_balance()`: \n * `response` **Changed** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.users.get_o_auth_access_token()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.instance_settings.change_domain()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.users.get_organization_invitations()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.users.verify_password()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.users.verify_totp()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.users.disable_mfa()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.users.delete_backup_codes()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.users.delete_passkey()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.users.delete_web3wallet()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.users.delete_totp()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.users.delete_external_account()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.users.set_password_compromised()`: \n * `response` **Changed** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.users.unset_password_compromised()`: \n * `response` **Changed** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.users.get_instance_organization_memberships()`: \n * `response.data[].public_user_data.deprovisioned` **Added**\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.invitations.create()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.invitations.bulk_create()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.invitations.revoke()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_invitations.get_all()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_invitations.create()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_invitations.list()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_invitations.bulk_create()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_invitations.list_pending()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_invitations.get()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_invitations.revoke()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.allowlist_identifiers.list()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.allowlist_identifiers.create()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.allowlist_identifiers.delete()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.blocklist_identifiers.list()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.blocklist_identifiers.create()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.blocklist_identifiers.delete()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.beta_features.update_instance_settings()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.beta_features.update_production_instance_domain()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.actor_tokens.create()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.actor_tokens.revoke()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.domains.add()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.domains.delete()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.domains.update()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.instance_settings.update()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.instance_settings.update_restrictions()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.instance_settings.update_communication()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_permissions.get()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.clients.list()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_permissions.create()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_permissions.list()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.billing.get_statement_payment_attempts()`: \n * `response.data[].payment_method.payment_type.enum(payer_credits)` **Added** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.billing.get_statement()`: \n * `response.groups[].items[].payment_method.payment_type.enum(payer_credits)` **Added** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.phone_numbers.create()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.clients.verify()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.billing.list_statements()`: \n * `response.data[].groups[].items[].payment_method.payment_type.enum(payer_credits)` **Added** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.instance_settings.update_organization_settings()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.billing.create_price_transition()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.instance_settings.update_instance_protect()`: \n * `response.checks_bypassed` **Added**\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.webhooks.create_svix_app()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.webhooks.delete_svix_app()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.webhooks.generate_svix_auth_url()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.jwt_templates.create()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.jwt_templates.get()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.jwt_templates.update()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.jwt_templates.delete()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.machines.list()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.machines.create()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.machines.get()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.machines.update()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.machines.delete()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.machines.get_secret_key()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.machines.rotate_secret_key()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.machines.create_scope()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.machines.delete_scope()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organizations.list()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organizations.create()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organizations.get()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organizations.update()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organizations.delete()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organizations.merge_metadata()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organizations.replace_metadata()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organizations.upload_logo()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organizations.delete_logo()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organizations.get_billing_subscription()`: \n * `response.subscription_items[].payment_method.payment_type.enum(payer_credits)` **Added** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.organizations.get_billing_credit_balance()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organizations.adjust_billing_credit_balance()`: \n * `response` **Changed** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_roles.list()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_roles.create()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_roles.get()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_roles.update()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_roles.delete()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_roles.assign_permission()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_roles.remove_permission()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_memberships.create()`: \n * `response.public_user_data.deprovisioned` **Added**\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_memberships.list()`: \n * `response.data[].public_user_data.deprovisioned` **Added**\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_memberships.update()`: \n * `response.public_user_data.deprovisioned` **Added**\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_memberships.delete()`: \n * `response.public_user_data.deprovisioned` **Added**\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_memberships.update_metadata()`: \n * `response.public_user_data.deprovisioned` **Added**\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_domains.create()`: \n * `response.enrollment_mode.enum(enterprise_sso)` **Added** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_domains.list()`: \n * `response.data[].enrollment_mode.enum(enterprise_sso)` **Added** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_domains.update()`: \n * `response.enrollment_mode.enum(enterprise_sso)` **Added** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_domains.delete()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_domains.verify_ownership()`: \n * `response.enrollment_mode.enum(enterprise_sso)` **Added** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_domains.list_all()`: \n * `request.enrollment_mode` **Changed**\n * `response.data[].enrollment_mode.enum(enterprise_sso)` **Added** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.proxy_checks.verify()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.redirect_urls.create()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.redirect_urls.get()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.redirect_urls.delete()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.sign_in_tokens.create()`: \n * `request.org_id` **Added**\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.sign_in_tokens.revoke()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.sign_ups.get()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.sign_ups.update()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.oauth_applications.list()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.oauth_applications.create()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.oauth_applications.get()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.oauth_applications.update()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.oauth_applications.delete()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.oauth_applications.upload_logo()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.oauth_applications.rotate_secret()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.saml_connections.list()`: \n * `response.data[]` **Changed**\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.saml_connections.create()`: \n * `request` **Changed**\n * `response` **Changed**\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.saml_connections.get()`: \n * `response` **Changed**\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.saml_connections.update()`: \n * `request.login_hint` **Added**\n * `response` **Changed**\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.saml_connections.delete()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.enterprise_connections.list()`: \n * `response.data[]` **Changed**\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.enterprise_connections.create()`: \n * `request.saml.login_hint` **Added**\n * `response` **Changed**\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.enterprise_connections.get()`: \n * `response` **Changed**\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.enterprise_connections.update()`: \n * `request.saml.login_hint` **Added**\n * `response` **Changed**\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.enterprise_connections.delete()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.enterprise_connections.list_test_runs()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.enterprise_connections.create_test_run()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.agent_tasks.create()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.agent_tasks.revoke()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.waitlist_entries.create()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.waitlist_entries.bulk_create()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.waitlist_entries.delete()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.waitlist_entries.invite()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.waitlist_entries.reject()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.billing.list_plans()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.billing.list_prices()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.billing.create_price()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.billing.list_subscription_items()`: \n * `response.data[].payment_method.payment_type.enum(payer_credits)` **Added** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.billing.cancel_subscription_item()`: \n * `response.payment_method.payment_type.enum(payer_credits)` **Added** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.billing.extend_subscription_item_free_trial()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.scim_directories.update()`: **Added**\n* `clerk.scim_directories.delete()`: **Added**\n* `clerk.instance_settings.get_o_auth_application_settings()`: `response` **Changed**\n* `clerk.scim_directories.delete_group_role_mapping()`: **Added**\n* `clerk.scim_directories.replace_group_role_mappings()`: **Added**\n* `clerk.scim_directories.create_group_role_mapping()`: **Added**\n* `clerk.scim_directories.list_group_role_mappings()`: **Added**\n* `clerk.scim_directories.rotate_api_key()`: **Added**\n* `clerk.scim_directories.get()`: **Added**\n* `clerk.instance_settings.get_instance_protect()`: `response.checks_bypassed` **Added**\n* `clerk.scim_directories.create()`: **Added**\n* `clerk.scim_directories.list()`: **Added**\n* `clerk.oauth_applications.revoke_token()`: **Added**\n* `clerk.users.revoke_trusted_device()`: **Added**\n* `clerk.users.list_trusted_devices()`: **Added**\n* `clerk.users.remove_password()`: **Added**\n" +releaseNotes: "## Python SDK Changes:\n* `clerk.users.list_biometric_credentials()`: **Added**\n* `clerk.users.revoke_biometric_credential()`: **Added**\n* `clerk.billing.apply_subscription_item_discount()`: **Added**\n* `clerk.billing.remove_subscription_item_discount()`: **Added**\n* `clerk.directories.list()`: **Added**\n* `clerk.directories.create()`: **Added**\n* `clerk.directories.get()`: **Added**\n* `clerk.directories.update()`: **Added**\n* `clerk.directories.delete()`: **Added**\n* `clerk.directories.rotate_api_key()`: **Added**\n* `clerk.directories.list_group_role_mappings()`: **Added**\n* `clerk.directories.create_group_role_mapping()`: **Added**\n* `clerk.directories.replace_group_role_mappings()`: **Added**\n* `clerk.directories.delete_group_role_mapping()`: **Added**\n* `clerk.users.list()`: \n * `request.starting_after` **Added**\n * `response.[].organization_memberships[].organization.self_serve_sso_enabled` **Added**\n* `clerk.users.create()`: \n * `request.skip_restriction_checks` **Added**\n * `response.organization_memberships[].organization.self_serve_sso_enabled` **Added**\n* `clerk.users.get()`: `response.organization_memberships[].organization.self_serve_sso_enabled` **Added**\n* `clerk.users.update()`: `response.organization_memberships[].organization.self_serve_sso_enabled` **Added**\n* `clerk.users.ban()`: `response.organization_memberships[].organization.self_serve_sso_enabled` **Added**\n* `clerk.users.unban()`: `response.organization_memberships[].organization.self_serve_sso_enabled` **Added**\n* `clerk.users.bulk_ban()`: `response.[].organization_memberships[].organization.self_serve_sso_enabled` **Added**\n* `clerk.users.bulk_unban()`: `response.[].organization_memberships[].organization.self_serve_sso_enabled` **Added**\n* `clerk.users.lock()`: `response.organization_memberships[].organization.self_serve_sso_enabled` **Added**\n* `clerk.users.unlock()`: `response.organization_memberships[].organization.self_serve_sso_enabled` **Added**\n* `clerk.users.set_profile_image()`: `response.organization_memberships[].organization.self_serve_sso_enabled` **Added**\n* `clerk.users.delete_profile_image()`: `response.organization_memberships[].organization.self_serve_sso_enabled` **Added**\n* `clerk.users.update_metadata()`: `response.organization_memberships[].organization.self_serve_sso_enabled` **Added**\n* `clerk.users.replace_metadata()`: `response.organization_memberships[].organization.self_serve_sso_enabled` **Added**\n* `clerk.users.get_organization_memberships()`: `response.data[].organization.self_serve_sso_enabled` **Added**\n* `clerk.users.remove_password()`: `response.organization_memberships[].organization.self_serve_sso_enabled` **Added**\n* `clerk.users.list_trusted_devices()`: **Deprecated**\n* `clerk.users.revoke_trusted_device()`: **Deprecated**\n* `clerk.users.set_password_compromised()`: `response.organization_memberships[].organization.self_serve_sso_enabled` **Added**\n* `clerk.users.unset_password_compromised()`: `response.organization_memberships[].organization.self_serve_sso_enabled` **Added**\n* `clerk.users.get_instance_organization_memberships()`: `response.data[].organization.self_serve_sso_enabled` **Added**\n* `clerk.actor_tokens.create()`: `error.status[403]` **Added**\n* `clerk.domains.list()`: `response.data[].dns_targets` **Added**\n* `clerk.domains.add()`: `response.dns_targets` **Added**\n* `clerk.domains.update()`: `response.dns_targets` **Added**\n* `clerk.instance_settings.get()`: `response` **Changed**\n* `clerk.instance_settings.update()`: `request` **Changed**\n* `clerk.instance_settings.get_o_auth_application_settings()`: `response` **Changed**\n* `clerk.instance_settings.update_o_auth_application_settings()`: \n * `request` **Changed**\n * `response` **Changed**\n* `clerk.instance_settings.get_instance_protect()`: `response` **Changed**\n* `clerk.instance_settings.update_instance_protect()`: `response` **Changed**\n* `clerk.organizations.list()`: `response.data[].self_serve_sso_enabled` **Added**\n* `clerk.organizations.create()`: `response.self_serve_sso_enabled` **Added**\n* `clerk.organizations.get()`: `response.self_serve_sso_enabled` **Added**\n* `clerk.organizations.update()`: \n * `request.self_serve_sso_enabled` **Added**\n * `response.self_serve_sso_enabled` **Added**\n* `clerk.organizations.merge_metadata()`: `response.self_serve_sso_enabled` **Added**\n* `clerk.organizations.replace_metadata()`: `response.self_serve_sso_enabled` **Added**\n* `clerk.organizations.upload_logo()`: `response.self_serve_sso_enabled` **Added**\n* `clerk.organizations.delete_logo()`: `response.self_serve_sso_enabled` **Added**\n* `clerk.organization_memberships.create()`: `response.organization.self_serve_sso_enabled` **Added**\n* `clerk.organization_memberships.list()`: `response.data[].organization.self_serve_sso_enabled` **Added**\n* `clerk.organization_memberships.update()`: `response.organization.self_serve_sso_enabled` **Added**\n* `clerk.organization_memberships.delete()`: `response.organization.self_serve_sso_enabled` **Added**\n* `clerk.organization_memberships.update_metadata()`: `response.organization.self_serve_sso_enabled` **Added**\n* `clerk.oauth_applications.list()`: `response.data[].device_authorization_grant_enabled` **Added**\n* `clerk.oauth_applications.create()`: \n * `request.device_authorization_grant_enabled` **Added**\n * `response.device_authorization_grant_enabled` **Added**\n* `clerk.oauth_applications.get()`: `response.device_authorization_grant_enabled` **Added**\n* `clerk.oauth_applications.update()`: \n * `request` **Changed**\n * `response.device_authorization_grant_enabled` **Added**\n* `clerk.oauth_applications.upload_logo()`: `response.device_authorization_grant_enabled` **Added**\n* `clerk.oauth_applications.rotate_secret()`: `response.device_authorization_grant_enabled` **Added**\n* `clerk.enterprise_connections.list()`: `response.data[].custom_attributes[].directory_path` **Added**\n* `clerk.enterprise_connections.create()`: \n * `request.custom_attributes[].directory_path` **Added**\n * `response.custom_attributes[].directory_path` **Added**\n* `clerk.enterprise_connections.get()`: `response.custom_attributes[].directory_path` **Added**\n* `clerk.enterprise_connections.update()`: \n * `request.custom_attributes[].directory_path` **Added**\n * `response.custom_attributes[].directory_path` **Added**\n* `clerk.scim_directories.list()`: `response.data[].custom_attributes[].directory_path` **Added**\n* `clerk.scim_directories.create()`: `response.custom_attributes[].directory_path` **Added**\n* `clerk.scim_directories.get()`: `response.custom_attributes[].directory_path` **Added**\n* `clerk.scim_directories.update()`: `response.custom_attributes[].directory_path` **Added**\n* `clerk.scim_directories.rotate_api_key()`: \n * `response.custom_attributes[].directory_path` **Added**\n * `error.status[422]` **Added**\n* `clerk.scim_directories.list_group_role_mappings()`: `response.data[]` **Changed**\n* `clerk.scim_directories.create_group_role_mapping()`: `response` **Changed**\n* `clerk.scim_directories.replace_group_role_mappings()`: `response.data[]` **Changed**\n" generatedFiles: - .gitattributes - .vscode/settings.json diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 8a22586f..5952ccde 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -29,7 +29,7 @@ generation: generateNewTests: false skipResponseBodyAssertions: false python: - version: 7.0.0 + version: 7.1.0 additionalDependencies: dev: pytest: ^8.3.3 @@ -65,6 +65,7 @@ python: flatteningOrder: parameters-first forwardCompatibleEnumsByDefault: false forwardCompatibleUnionsByDefault: "false" + httpClientLibrary: httpx imports: option: openapi paths: diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index e648fba9..84642578 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -1,9 +1,9 @@ -speakeasyVersion: 1.793.0 +speakeasyVersion: 1.796.4 sources: clerk-openapi: sourceNamespace: clerk-openapi - sourceRevisionDigest: sha256:bd0ab322463c77574aedf25a6a1096c2d83c979091a90549aa26cda62d070f8e - sourceBlobDigest: sha256:cd24ae3cad1eb4442115f308e7a4007f47d67aa99f55067edda80def25fcaabe + sourceRevisionDigest: sha256:218af509e153f09cc22d9da3e7bbfacf3859a60d6106ea6e9a1a5ac978b8a374 + sourceBlobDigest: sha256:2ffd1335afc9151c275c0a6eb12c095775cdffb6f66eff2f43562261f7c58eaf tags: - latest - "2026-05-12" @@ -11,10 +11,10 @@ targets: clerk-sdk-python: source: clerk-openapi sourceNamespace: clerk-openapi - sourceRevisionDigest: sha256:bd0ab322463c77574aedf25a6a1096c2d83c979091a90549aa26cda62d070f8e - sourceBlobDigest: sha256:cd24ae3cad1eb4442115f308e7a4007f47d67aa99f55067edda80def25fcaabe + sourceRevisionDigest: sha256:218af509e153f09cc22d9da3e7bbfacf3859a60d6106ea6e9a1a5ac978b8a374 + sourceBlobDigest: sha256:2ffd1335afc9151c275c0a6eb12c095775cdffb6f66eff2f43562261f7c58eaf codeSamplesNamespace: clerk-openapi-python-code-samples - codeSamplesRevisionDigest: sha256:9b07759bffaa23cbe523a107eace55b58532d750e74bfedf47a32c6bdf2bd801 + codeSamplesRevisionDigest: sha256:d7b039e49373d258912c0c6542ecd4371419a79dfa098c9946d55fb01a320208 workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/README-PYPI.md b/README-PYPI.md index 299ec12a..c87c2754 100644 --- a/README-PYPI.md +++ b/README-PYPI.md @@ -296,6 +296,8 @@ def verify_machine_token(request: httpx.Request): * [cancel_subscription_item](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/billing/README.md#cancel_subscription_item) - Cancel a subscription item * [extend_subscription_item_free_trial](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/billing/README.md#extend_subscription_item_free_trial) - Extend free trial for a subscription item * [create_price_transition](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/billing/README.md#create_price_transition) - Create a price transition for a subscription item +* [apply_subscription_item_discount](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/billing/README.md#apply_subscription_item_discount) - Apply a discount to a subscription item +* [remove_subscription_item_discount](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/billing/README.md#remove_subscription_item_discount) - Remove a discount from a subscription item * [list_statements](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/billing/README.md#list_statements) - List all billing statements * [get_statement](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/billing/README.md#get_statement) - Retrieve a billing statement * [get_statement_payment_attempts](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/billing/README.md#get_statement_payment_attempts) - List payment attempts for a billing statement @@ -312,6 +314,19 @@ def verify_machine_token(request: httpx.Request): * [verify](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/clients/README.md#verify) - Verify a client * [get](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/clients/README.md#get) - Get a client +### [Directories](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/directories/README.md) + +* [list](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/directories/README.md#list) - List all directories +* [create](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/directories/README.md#create) - Create a directory +* [get](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/directories/README.md#get) - Retrieve a directory +* [update](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/directories/README.md#update) - Update a directory +* [delete](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/directories/README.md#delete) - Delete a directory +* [rotate_api_key](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/directories/README.md#rotate_api_key) - Rotate a directory's API key +* [list_group_role_mappings](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/directories/README.md#list_group_role_mappings) - List directory group role mappings +* [create_group_role_mapping](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/directories/README.md#create_group_role_mapping) - Create a directory group role mapping +* [replace_group_role_mappings](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/directories/README.md#replace_group_role_mappings) - Replace directory group role mappings +* [delete_group_role_mapping](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/directories/README.md#delete_group_role_mapping) - Delete a directory group role mapping + ### [Domains](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/domainssdk/README.md) * [list](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/domainssdk/README.md#list) - List all instance domains @@ -523,12 +538,12 @@ def verify_machine_token(request: httpx.Request): ### [ScimDirectories](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/scimdirectories/README.md) -* [list](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/scimdirectories/README.md#list) - List all SCIM directories -* [create](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/scimdirectories/README.md#create) - Create a SCIM directory -* [get](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/scimdirectories/README.md#get) - Retrieve a SCIM directory -* [update](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/scimdirectories/README.md#update) - Update a SCIM directory -* [delete](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/scimdirectories/README.md#delete) - Delete a SCIM directory -* [rotate_api_key](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/scimdirectories/README.md#rotate_api_key) - Rotate a SCIM directory's API key +* [list](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/scimdirectories/README.md#list) - List all directories +* [create](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/scimdirectories/README.md#create) - Create a directory +* [get](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/scimdirectories/README.md#get) - Retrieve a directory +* [update](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/scimdirectories/README.md#update) - Update a directory +* [delete](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/scimdirectories/README.md#delete) - Delete a directory +* [rotate_api_key](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/scimdirectories/README.md#rotate_api_key) - Rotate a directory's API key * [list_group_role_mappings](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/scimdirectories/README.md#list_group_role_mappings) - List SCIM group role mappings * [create_group_role_mapping](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/scimdirectories/README.md#create_group_role_mapping) - Create a SCIM group role mapping * [replace_group_role_mappings](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/scimdirectories/README.md#replace_group_role_mappings) - Replace SCIM group role mappings @@ -592,8 +607,10 @@ def verify_machine_token(request: httpx.Request): * [disable_mfa](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/users/README.md#disable_mfa) - Disable a user's MFA methods * [delete_backup_codes](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/users/README.md#delete_backup_codes) - Disable all user's Backup codes * [delete_passkey](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/users/README.md#delete_passkey) - Delete a user passkey -* [list_trusted_devices](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/users/README.md#list_trusted_devices) - List a user's trusted devices -* [revoke_trusted_device](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/users/README.md#revoke_trusted_device) - Revoke a user's trusted device +* [~~list_trusted_devices~~](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/users/README.md#list_trusted_devices) - List a user's trusted devices :warning: **Deprecated** +* [~~revoke_trusted_device~~](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/users/README.md#revoke_trusted_device) - Revoke a user's trusted device :warning: **Deprecated** +* [list_biometric_credentials](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/users/README.md#list_biometric_credentials) - List a user's biometric credentials +* [revoke_biometric_credential](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/users/README.md#revoke_biometric_credential) - Revoke a user's biometric credential * [delete_web3_wallet](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/users/README.md#delete_web3_wallet) - Delete a user web3 wallet * [delete_totp](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/users/README.md#delete_totp) - Delete all the user's TOTPs * [delete_external_account](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/users/README.md#delete_external_account) - Delete External Account @@ -749,41 +766,41 @@ with Clerk( **Inherit from [`ClerkBaseError`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/clerkbaseerror.py)**: -* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`CreateAPIKeyAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`GetAPIKeysAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getapikeysapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`GetAPIKeyAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`UpdateAPIKeyAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/updateapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`DeleteAPIKeyAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/deleteapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`GetAPIKeySecretAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getapikeysecretapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`RevokeAPIKeyAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokeapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`VerifyAPIKeyAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/verifyapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`CreateM2MTokenM2mResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createm2mtokenm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`GetM2MTokensM2mResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getm2mtokensm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`RevokeM2MTokenM2mResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokem2mtokenm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`VerifyM2MTokenM2mResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/verifym2mtokenm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`VerifyOAuthAccessTokenOauthAccessTokensResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/verifyoauthaccesstokenoauthaccesstokensresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponseresponsebody.py): 401 Unauthorized. Status code `401`. Applicable to 1 of 237 methods.* -* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponseresponsebody.py): 401 Unauthorized. Status code `401`. Applicable to 1 of 237 methods.* -* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponse403ResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponse403responsebody.py): 403 Forbidden. Status code `403`. Applicable to 1 of 237 methods.* -* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponse403ResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponse403responsebody.py): 403 Forbidden. Status code `403`. Applicable to 1 of 237 methods.* -* [`GetM2MTokensM2mResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getm2mtokensm2mresponseresponsebody.py): 403 Forbidden. Status code `403`. Applicable to 1 of 237 methods.* -* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponse404ResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponse404responsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 237 methods.* -* [`GetAPIKeysAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getapikeysapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 237 methods.* -* [`GetAPIKeyAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 237 methods.* -* [`UpdateAPIKeyAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/updateapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 237 methods.* -* [`DeleteAPIKeyAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/deleteapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 237 methods.* -* [`GetAPIKeySecretAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getapikeysecretapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 237 methods.* -* [`RevokeAPIKeyAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokeapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 237 methods.* -* [`VerifyAPIKeyAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/verifyapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 237 methods.* -* [`GetM2MTokensM2mResponse404ResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getm2mtokensm2mresponse404responsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 237 methods.* -* [`RevokeM2MTokenM2mResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokem2mtokenm2mresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 237 methods.* -* [`VerifyM2MTokenM2mResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/verifym2mtokenm2mresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 237 methods.* -* [`VerifyOAuthAccessTokenOauthAccessTokensResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/verifyoauthaccesstokenoauthaccesstokensresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 237 methods.* -* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponse409ResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponse409responsebody.py): 409 Conflict. Status code `409`. Applicable to 1 of 237 methods.* -* [`CreateAPIKeyAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createapikeyapikeysresponseresponsebody.py): 409 Conflict. Status code `409`. Applicable to 1 of 237 methods.* -* [`CreateM2MTokenM2mResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createm2mtokenm2mresponseresponsebody.py): 409 Conflict. Status code `409`. Applicable to 1 of 237 methods.* +* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`CreateAPIKeyAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`GetAPIKeysAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getapikeysapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`GetAPIKeyAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`UpdateAPIKeyAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/updateapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`DeleteAPIKeyAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/deleteapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`GetAPIKeySecretAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getapikeysecretapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`RevokeAPIKeyAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokeapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`VerifyAPIKeyAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/verifyapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`CreateM2MTokenM2mResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createm2mtokenm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`GetM2MTokensM2mResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getm2mtokensm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`RevokeM2MTokenM2mResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokem2mtokenm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`VerifyM2MTokenM2mResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/verifym2mtokenm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`VerifyOAuthAccessTokenOauthAccessTokensResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/verifyoauthaccesstokenoauthaccesstokensresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponseresponsebody.py): 401 Unauthorized. Status code `401`. Applicable to 1 of 251 methods.* +* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponseresponsebody.py): 401 Unauthorized. Status code `401`. Applicable to 1 of 251 methods.* +* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponse403ResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponse403responsebody.py): 403 Forbidden. Status code `403`. Applicable to 1 of 251 methods.* +* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponse403ResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponse403responsebody.py): 403 Forbidden. Status code `403`. Applicable to 1 of 251 methods.* +* [`GetM2MTokensM2mResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getm2mtokensm2mresponseresponsebody.py): 403 Forbidden. Status code `403`. Applicable to 1 of 251 methods.* +* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponse404ResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponse404responsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 251 methods.* +* [`GetAPIKeysAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getapikeysapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 251 methods.* +* [`GetAPIKeyAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 251 methods.* +* [`UpdateAPIKeyAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/updateapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 251 methods.* +* [`DeleteAPIKeyAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/deleteapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 251 methods.* +* [`GetAPIKeySecretAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getapikeysecretapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 251 methods.* +* [`RevokeAPIKeyAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokeapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 251 methods.* +* [`VerifyAPIKeyAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/verifyapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 251 methods.* +* [`GetM2MTokensM2mResponse404ResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getm2mtokensm2mresponse404responsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 251 methods.* +* [`RevokeM2MTokenM2mResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokem2mtokenm2mresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 251 methods.* +* [`VerifyM2MTokenM2mResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/verifym2mtokenm2mresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 251 methods.* +* [`VerifyOAuthAccessTokenOauthAccessTokensResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/verifyoauthaccesstokenoauthaccesstokensresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 251 methods.* +* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponse409ResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponse409responsebody.py): 409 Conflict. Status code `409`. Applicable to 1 of 251 methods.* +* [`CreateAPIKeyAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createapikeyapikeysresponseresponsebody.py): 409 Conflict. Status code `409`. Applicable to 1 of 251 methods.* +* [`CreateM2MTokenM2mResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createm2mtokenm2mresponseresponsebody.py): 409 Conflict. Status code `409`. Applicable to 1 of 251 methods.* * [`ResponseValidationError`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/responsevalidationerror.py): Type mismatch between the response data and the expected Pydantic model. Provides access to the Pydantic validation error via the `cause` attribute. @@ -891,6 +908,20 @@ class CustomClient(AsyncHttpClient): s = Clerk(async_client=CustomClient(httpx.AsyncClient())) ``` +### httpx2 (Pydantic's httpx fork) + +[httpx2](https://httpx2.pydantic.dev/) is Pydantic's maintained fork of `httpx`. To run this SDK on httpx2, call `alias_httpx()` at your program's entry point, before importing the SDK, so every `import httpx` — including the ones inside the SDK — resolves to `httpx2`: +```python +import httpx2 + +httpx2.alias_httpx() + +from clerk_backend_api import Clerk + +s = Clerk() +``` + +An SDK can also be generated against httpx2 directly, so it depends on the fork instead of `httpx`, by setting `python.httpClientLibrary: httpx2` in `gen.yaml`. diff --git a/README.md b/README.md index 0e02bc4f..58c5464d 100644 --- a/README.md +++ b/README.md @@ -296,6 +296,8 @@ def verify_machine_token(request: httpx.Request): * [cancel_subscription_item](docs/sdks/billing/README.md#cancel_subscription_item) - Cancel a subscription item * [extend_subscription_item_free_trial](docs/sdks/billing/README.md#extend_subscription_item_free_trial) - Extend free trial for a subscription item * [create_price_transition](docs/sdks/billing/README.md#create_price_transition) - Create a price transition for a subscription item +* [apply_subscription_item_discount](docs/sdks/billing/README.md#apply_subscription_item_discount) - Apply a discount to a subscription item +* [remove_subscription_item_discount](docs/sdks/billing/README.md#remove_subscription_item_discount) - Remove a discount from a subscription item * [list_statements](docs/sdks/billing/README.md#list_statements) - List all billing statements * [get_statement](docs/sdks/billing/README.md#get_statement) - Retrieve a billing statement * [get_statement_payment_attempts](docs/sdks/billing/README.md#get_statement_payment_attempts) - List payment attempts for a billing statement @@ -312,6 +314,19 @@ def verify_machine_token(request: httpx.Request): * [verify](docs/sdks/clients/README.md#verify) - Verify a client * [get](docs/sdks/clients/README.md#get) - Get a client +### [Directories](docs/sdks/directories/README.md) + +* [list](docs/sdks/directories/README.md#list) - List all directories +* [create](docs/sdks/directories/README.md#create) - Create a directory +* [get](docs/sdks/directories/README.md#get) - Retrieve a directory +* [update](docs/sdks/directories/README.md#update) - Update a directory +* [delete](docs/sdks/directories/README.md#delete) - Delete a directory +* [rotate_api_key](docs/sdks/directories/README.md#rotate_api_key) - Rotate a directory's API key +* [list_group_role_mappings](docs/sdks/directories/README.md#list_group_role_mappings) - List directory group role mappings +* [create_group_role_mapping](docs/sdks/directories/README.md#create_group_role_mapping) - Create a directory group role mapping +* [replace_group_role_mappings](docs/sdks/directories/README.md#replace_group_role_mappings) - Replace directory group role mappings +* [delete_group_role_mapping](docs/sdks/directories/README.md#delete_group_role_mapping) - Delete a directory group role mapping + ### [Domains](docs/sdks/domainssdk/README.md) * [list](docs/sdks/domainssdk/README.md#list) - List all instance domains @@ -523,12 +538,12 @@ def verify_machine_token(request: httpx.Request): ### [ScimDirectories](docs/sdks/scimdirectories/README.md) -* [list](docs/sdks/scimdirectories/README.md#list) - List all SCIM directories -* [create](docs/sdks/scimdirectories/README.md#create) - Create a SCIM directory -* [get](docs/sdks/scimdirectories/README.md#get) - Retrieve a SCIM directory -* [update](docs/sdks/scimdirectories/README.md#update) - Update a SCIM directory -* [delete](docs/sdks/scimdirectories/README.md#delete) - Delete a SCIM directory -* [rotate_api_key](docs/sdks/scimdirectories/README.md#rotate_api_key) - Rotate a SCIM directory's API key +* [list](docs/sdks/scimdirectories/README.md#list) - List all directories +* [create](docs/sdks/scimdirectories/README.md#create) - Create a directory +* [get](docs/sdks/scimdirectories/README.md#get) - Retrieve a directory +* [update](docs/sdks/scimdirectories/README.md#update) - Update a directory +* [delete](docs/sdks/scimdirectories/README.md#delete) - Delete a directory +* [rotate_api_key](docs/sdks/scimdirectories/README.md#rotate_api_key) - Rotate a directory's API key * [list_group_role_mappings](docs/sdks/scimdirectories/README.md#list_group_role_mappings) - List SCIM group role mappings * [create_group_role_mapping](docs/sdks/scimdirectories/README.md#create_group_role_mapping) - Create a SCIM group role mapping * [replace_group_role_mappings](docs/sdks/scimdirectories/README.md#replace_group_role_mappings) - Replace SCIM group role mappings @@ -592,8 +607,10 @@ def verify_machine_token(request: httpx.Request): * [disable_mfa](docs/sdks/users/README.md#disable_mfa) - Disable a user's MFA methods * [delete_backup_codes](docs/sdks/users/README.md#delete_backup_codes) - Disable all user's Backup codes * [delete_passkey](docs/sdks/users/README.md#delete_passkey) - Delete a user passkey -* [list_trusted_devices](docs/sdks/users/README.md#list_trusted_devices) - List a user's trusted devices -* [revoke_trusted_device](docs/sdks/users/README.md#revoke_trusted_device) - Revoke a user's trusted device +* [~~list_trusted_devices~~](docs/sdks/users/README.md#list_trusted_devices) - List a user's trusted devices :warning: **Deprecated** +* [~~revoke_trusted_device~~](docs/sdks/users/README.md#revoke_trusted_device) - Revoke a user's trusted device :warning: **Deprecated** +* [list_biometric_credentials](docs/sdks/users/README.md#list_biometric_credentials) - List a user's biometric credentials +* [revoke_biometric_credential](docs/sdks/users/README.md#revoke_biometric_credential) - Revoke a user's biometric credential * [delete_web3_wallet](docs/sdks/users/README.md#delete_web3_wallet) - Delete a user web3 wallet * [delete_totp](docs/sdks/users/README.md#delete_totp) - Delete all the user's TOTPs * [delete_external_account](docs/sdks/users/README.md#delete_external_account) - Delete External Account @@ -749,41 +766,41 @@ with Clerk( **Inherit from [`ClerkBaseError`](./src/clerk_backend_api/models/clerkbaseerror.py)**: -* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponseBody`](./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponseBody`](./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`CreateAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/createapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`GetAPIKeysAPIKeysResponseBody`](./src/clerk_backend_api/models/getapikeysapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`GetAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/getapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`UpdateAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/updateapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`DeleteAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/deleteapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`GetAPIKeySecretAPIKeysResponseBody`](./src/clerk_backend_api/models/getapikeysecretapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`RevokeAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/revokeapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`VerifyAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/verifyapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`CreateM2MTokenM2mResponseBody`](./src/clerk_backend_api/models/createm2mtokenm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`GetM2MTokensM2mResponseBody`](./src/clerk_backend_api/models/getm2mtokensm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`RevokeM2MTokenM2mResponseBody`](./src/clerk_backend_api/models/revokem2mtokenm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`VerifyM2MTokenM2mResponseBody`](./src/clerk_backend_api/models/verifym2mtokenm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`VerifyOAuthAccessTokenOauthAccessTokensResponseBody`](./src/clerk_backend_api/models/verifyoauthaccesstokenoauthaccesstokensresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 237 methods.* -* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponseResponseBody`](./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponseresponsebody.py): 401 Unauthorized. Status code `401`. Applicable to 1 of 237 methods.* -* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponseResponseBody`](./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponseresponsebody.py): 401 Unauthorized. Status code `401`. Applicable to 1 of 237 methods.* -* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponse403ResponseBody`](./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponse403responsebody.py): 403 Forbidden. Status code `403`. Applicable to 1 of 237 methods.* -* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponse403ResponseBody`](./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponse403responsebody.py): 403 Forbidden. Status code `403`. Applicable to 1 of 237 methods.* -* [`GetM2MTokensM2mResponseResponseBody`](./src/clerk_backend_api/models/getm2mtokensm2mresponseresponsebody.py): 403 Forbidden. Status code `403`. Applicable to 1 of 237 methods.* -* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponse404ResponseBody`](./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponse404responsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 237 methods.* -* [`GetAPIKeysAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/getapikeysapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 237 methods.* -* [`GetAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/getapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 237 methods.* -* [`UpdateAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/updateapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 237 methods.* -* [`DeleteAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/deleteapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 237 methods.* -* [`GetAPIKeySecretAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/getapikeysecretapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 237 methods.* -* [`RevokeAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/revokeapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 237 methods.* -* [`VerifyAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/verifyapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 237 methods.* -* [`GetM2MTokensM2mResponse404ResponseBody`](./src/clerk_backend_api/models/getm2mtokensm2mresponse404responsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 237 methods.* -* [`RevokeM2MTokenM2mResponseResponseBody`](./src/clerk_backend_api/models/revokem2mtokenm2mresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 237 methods.* -* [`VerifyM2MTokenM2mResponseResponseBody`](./src/clerk_backend_api/models/verifym2mtokenm2mresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 237 methods.* -* [`VerifyOAuthAccessTokenOauthAccessTokensResponseResponseBody`](./src/clerk_backend_api/models/verifyoauthaccesstokenoauthaccesstokensresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 237 methods.* -* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponse409ResponseBody`](./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponse409responsebody.py): 409 Conflict. Status code `409`. Applicable to 1 of 237 methods.* -* [`CreateAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/createapikeyapikeysresponseresponsebody.py): 409 Conflict. Status code `409`. Applicable to 1 of 237 methods.* -* [`CreateM2MTokenM2mResponseResponseBody`](./src/clerk_backend_api/models/createm2mtokenm2mresponseresponsebody.py): 409 Conflict. Status code `409`. Applicable to 1 of 237 methods.* +* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponseBody`](./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponseBody`](./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`CreateAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/createapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`GetAPIKeysAPIKeysResponseBody`](./src/clerk_backend_api/models/getapikeysapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`GetAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/getapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`UpdateAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/updateapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`DeleteAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/deleteapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`GetAPIKeySecretAPIKeysResponseBody`](./src/clerk_backend_api/models/getapikeysecretapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`RevokeAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/revokeapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`VerifyAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/verifyapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`CreateM2MTokenM2mResponseBody`](./src/clerk_backend_api/models/createm2mtokenm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`GetM2MTokensM2mResponseBody`](./src/clerk_backend_api/models/getm2mtokensm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`RevokeM2MTokenM2mResponseBody`](./src/clerk_backend_api/models/revokem2mtokenm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`VerifyM2MTokenM2mResponseBody`](./src/clerk_backend_api/models/verifym2mtokenm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`VerifyOAuthAccessTokenOauthAccessTokensResponseBody`](./src/clerk_backend_api/models/verifyoauthaccesstokenoauthaccesstokensresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 251 methods.* +* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponseResponseBody`](./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponseresponsebody.py): 401 Unauthorized. Status code `401`. Applicable to 1 of 251 methods.* +* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponseResponseBody`](./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponseresponsebody.py): 401 Unauthorized. Status code `401`. Applicable to 1 of 251 methods.* +* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponse403ResponseBody`](./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponse403responsebody.py): 403 Forbidden. Status code `403`. Applicable to 1 of 251 methods.* +* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponse403ResponseBody`](./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponse403responsebody.py): 403 Forbidden. Status code `403`. Applicable to 1 of 251 methods.* +* [`GetM2MTokensM2mResponseResponseBody`](./src/clerk_backend_api/models/getm2mtokensm2mresponseresponsebody.py): 403 Forbidden. Status code `403`. Applicable to 1 of 251 methods.* +* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponse404ResponseBody`](./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponse404responsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 251 methods.* +* [`GetAPIKeysAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/getapikeysapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 251 methods.* +* [`GetAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/getapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 251 methods.* +* [`UpdateAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/updateapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 251 methods.* +* [`DeleteAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/deleteapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 251 methods.* +* [`GetAPIKeySecretAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/getapikeysecretapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 251 methods.* +* [`RevokeAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/revokeapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 251 methods.* +* [`VerifyAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/verifyapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 251 methods.* +* [`GetM2MTokensM2mResponse404ResponseBody`](./src/clerk_backend_api/models/getm2mtokensm2mresponse404responsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 251 methods.* +* [`RevokeM2MTokenM2mResponseResponseBody`](./src/clerk_backend_api/models/revokem2mtokenm2mresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 251 methods.* +* [`VerifyM2MTokenM2mResponseResponseBody`](./src/clerk_backend_api/models/verifym2mtokenm2mresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 251 methods.* +* [`VerifyOAuthAccessTokenOauthAccessTokensResponseResponseBody`](./src/clerk_backend_api/models/verifyoauthaccesstokenoauthaccesstokensresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 251 methods.* +* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponse409ResponseBody`](./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponse409responsebody.py): 409 Conflict. Status code `409`. Applicable to 1 of 251 methods.* +* [`CreateAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/createapikeyapikeysresponseresponsebody.py): 409 Conflict. Status code `409`. Applicable to 1 of 251 methods.* +* [`CreateM2MTokenM2mResponseResponseBody`](./src/clerk_backend_api/models/createm2mtokenm2mresponseresponsebody.py): 409 Conflict. Status code `409`. Applicable to 1 of 251 methods.* * [`ResponseValidationError`](./src/clerk_backend_api/models/responsevalidationerror.py): Type mismatch between the response data and the expected Pydantic model. Provides access to the Pydantic validation error via the `cause` attribute. @@ -891,6 +908,20 @@ class CustomClient(AsyncHttpClient): s = Clerk(async_client=CustomClient(httpx.AsyncClient())) ``` +### httpx2 (Pydantic's httpx fork) + +[httpx2](https://httpx2.pydantic.dev/) is Pydantic's maintained fork of `httpx`. To run this SDK on httpx2, call `alias_httpx()` at your program's entry point, before importing the SDK, so every `import httpx` — including the ones inside the SDK — resolves to `httpx2`: +```python +import httpx2 + +httpx2.alias_httpx() + +from clerk_backend_api import Clerk + +s = Clerk() +``` + +An SDK can also be generated against httpx2 directly, so it depends on the fork instead of `httpx`, by setting `python.httpClientLibrary: httpx2` in `gen.yaml`. diff --git a/RELEASES.md b/RELEASES.md index ecf78b59..68522e5d 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -648,4 +648,14 @@ Based on: ### Generated - [python v7.0.0] . ### Releases -- [PyPI v7.0.0] https://pypi.org/project/clerk-backend-api/7.0.0 - . \ No newline at end of file +- [PyPI v7.0.0] https://pypi.org/project/clerk-backend-api/7.0.0 - . + +## 2026-09-13 00:36:59 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.796.4 (2.935.1) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v7.1.0] . +### Releases +- [PyPI v7.1.0] https://pypi.org/project/clerk-backend-api/7.1.0 - . \ No newline at end of file diff --git a/docs/models/amountoff.md b/docs/models/amountoff.md new file mode 100644 index 00000000..93e4bc23 --- /dev/null +++ b/docs/models/amountoff.md @@ -0,0 +1,13 @@ +# AmountOff + +Fixed amount off when the effect is fixed_amount. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `amount` | *int* | :heavy_check_mark: | The amount in cents. | +| `amount_formatted` | *str* | :heavy_check_mark: | The formatted amount as a string (e.g., "$49.99"). | +| `currency` | *str* | :heavy_check_mark: | The currency code (e.g., "USD"). | +| `currency_symbol` | *str* | :heavy_check_mark: | The currency symbol (e.g., "$"). | \ No newline at end of file diff --git a/docs/models/applybillingsubscriptionitemdiscountrequest.md b/docs/models/applybillingsubscriptionitemdiscountrequest.md new file mode 100644 index 00000000..ba5f4ef1 --- /dev/null +++ b/docs/models/applybillingsubscriptionitemdiscountrequest.md @@ -0,0 +1,9 @@ +# ApplyBillingSubscriptionItemDiscountRequest + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| `subscription_item_id` | *str* | :heavy_check_mark: | The ID of the subscription item to apply the discount to | +| `apply_commerce_discount_request` | [models.ApplyCommerceDiscountRequest](../models/applycommercediscountrequest.md) | :heavy_check_mark: | Parameters for applying the discount | \ No newline at end of file diff --git a/docs/models/applycommercediscountrequest.md b/docs/models/applycommercediscountrequest.md new file mode 100644 index 00000000..ffa2fe40 --- /dev/null +++ b/docs/models/applycommercediscountrequest.md @@ -0,0 +1,8 @@ +# ApplyCommerceDiscountRequest + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | +| `discount_id` | *str* | :heavy_check_mark: | The ID of the discount to apply to the subscription item. | \ No newline at end of file diff --git a/docs/models/automationdisposition.md b/docs/models/automationdisposition.md new file mode 100644 index 00000000..91fc3344 --- /dev/null +++ b/docs/models/automationdisposition.md @@ -0,0 +1,18 @@ +# AutomationDisposition + +## Example Usage + +```python +from clerk_backend_api.models import AutomationDisposition + +value = AutomationDisposition.ALREADY_SATISFIED +``` + + +## Values + +| Name | Value | +| ---------------------------- | ---------------------------- | +| `ALREADY_SATISFIED` | already_satisfied | +| `SAFE_TO_CREATE` | safe_to_create | +| `MANUAL_RESOLUTION_REQUIRED` | manual_resolution_required | \ No newline at end of file diff --git a/docs/models/biometriccredential.md b/docs/models/biometriccredential.md new file mode 100644 index 00000000..895f4d13 --- /dev/null +++ b/docs/models/biometriccredential.md @@ -0,0 +1,18 @@ +# BiometricCredential + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| `object` | [models.BiometricCredentialObject](../models/biometriccredentialobject.md) | :heavy_check_mark: | String representing the object's type. | +| `id` | *str* | :heavy_check_mark: | N/A | +| `platform` | [models.BiometricCredentialPlatform](../models/biometriccredentialplatform.md) | :heavy_check_mark: | N/A | +| `app_identifier` | *str* | :heavy_check_mark: | N/A | +| `name` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | +| `algorithm` | [models.BiometricCredentialAlgorithm](../models/biometriccredentialalgorithm.md) | :heavy_check_mark: | N/A | +| `status` | [models.BiometricCredentialStatus](../models/biometriccredentialstatus.md) | :heavy_check_mark: | N/A | +| `created_at` | *int* | :heavy_check_mark: | Unix timestamp of creation in milliseconds. | +| `updated_at` | *int* | :heavy_check_mark: | Unix timestamp of the last update in milliseconds. | +| `last_used_at` | *OptionalNullable[int]* | :heavy_minus_sign: | Unix timestamp of the last use in milliseconds. | +| `revoked_at` | *OptionalNullable[int]* | :heavy_minus_sign: | Unix timestamp of revocation in milliseconds. | \ No newline at end of file diff --git a/docs/models/biometriccredentialalgorithm.md b/docs/models/biometriccredentialalgorithm.md new file mode 100644 index 00000000..4597410f --- /dev/null +++ b/docs/models/biometriccredentialalgorithm.md @@ -0,0 +1,16 @@ +# BiometricCredentialAlgorithm + +## Example Usage + +```python +from clerk_backend_api.models import BiometricCredentialAlgorithm + +value = BiometricCredentialAlgorithm.ES256 +``` + + +## Values + +| Name | Value | +| ------- | ------- | +| `ES256` | ES256 | \ No newline at end of file diff --git a/docs/models/biometriccredentiallist.md b/docs/models/biometriccredentiallist.md new file mode 100644 index 00000000..707926af --- /dev/null +++ b/docs/models/biometriccredentiallist.md @@ -0,0 +1,11 @@ +# BiometricCredentialList + +Success + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | +| `data` | List[[models.BiometricCredential](../models/biometriccredential.md)] | :heavy_check_mark: | N/A | +| `total_count` | *int* | :heavy_check_mark: | Total number of biometric credentials | \ No newline at end of file diff --git a/docs/models/biometriccredentialobject.md b/docs/models/biometriccredentialobject.md new file mode 100644 index 00000000..9db0bfc1 --- /dev/null +++ b/docs/models/biometriccredentialobject.md @@ -0,0 +1,18 @@ +# BiometricCredentialObject + +String representing the object's type. + +## Example Usage + +```python +from clerk_backend_api.models import BiometricCredentialObject + +value = BiometricCredentialObject.TRUSTED_DEVICE +``` + + +## Values + +| Name | Value | +| ---------------- | ---------------- | +| `TRUSTED_DEVICE` | trusted_device | \ No newline at end of file diff --git a/docs/models/biometriccredentialplatform.md b/docs/models/biometriccredentialplatform.md new file mode 100644 index 00000000..e7df5e8e --- /dev/null +++ b/docs/models/biometriccredentialplatform.md @@ -0,0 +1,17 @@ +# BiometricCredentialPlatform + +## Example Usage + +```python +from clerk_backend_api.models import BiometricCredentialPlatform + +value = BiometricCredentialPlatform.IOS +``` + + +## Values + +| Name | Value | +| --------- | --------- | +| `IOS` | ios | +| `ANDROID` | android | \ No newline at end of file diff --git a/docs/models/biometriccredentialstatus.md b/docs/models/biometriccredentialstatus.md new file mode 100644 index 00000000..f7fed76b --- /dev/null +++ b/docs/models/biometriccredentialstatus.md @@ -0,0 +1,17 @@ +# BiometricCredentialStatus + +## Example Usage + +```python +from clerk_backend_api.models import BiometricCredentialStatus + +value = BiometricCredentialStatus.ACTIVE +``` + + +## Values + +| Name | Value | +| --------- | --------- | +| `ACTIVE` | active | +| `REVOKED` | revoked | \ No newline at end of file diff --git a/docs/models/commercediscountredemptionresponse.md b/docs/models/commercediscountredemptionresponse.md new file mode 100644 index 00000000..c9b5cb55 --- /dev/null +++ b/docs/models/commercediscountredemptionresponse.md @@ -0,0 +1,25 @@ +# CommerceDiscountRedemptionResponse + +A commerce discount redemption. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| `object` | [models.CommerceDiscountRedemptionResponseObject](../models/commercediscountredemptionresponseobject.md) | :heavy_check_mark: | String representing the object's type. Objects of the same type share the same value. | +| `id` | *str* | :heavy_check_mark: | Unique identifier for the discount redemption. | +| `subscription_item_id` | *str* | :heavy_check_mark: | Unique identifier for the subscription item the discount was applied to. | +| `discount_id` | *str* | :heavy_check_mark: | Unique identifier for the discount that was applied. | +| `name` | *Optional[str]* | :heavy_minus_sign: | The display name of the discount. | +| `source` | [models.Source](../models/source.md) | :heavy_check_mark: | How the discount was applied to the subscription item. | +| `promo_code` | *Optional[str]* | :heavy_minus_sign: | The promo code used to redeem the discount, when applicable. | +| `effect` | [Optional[models.Effect]](../models/effect.md) | :heavy_minus_sign: | The snapshotted discount effect. | +| `percent_off` | *OptionalNullable[float]* | :heavy_minus_sign: | Percent off when the effect is percentage. | +| `amount_off` | [OptionalNullable[models.AmountOff]](../models/amountoff.md) | :heavy_minus_sign: | Fixed amount off when the effect is fixed_amount. | +| `amount` | [OptionalNullable[models.CommerceDiscountRedemptionResponseAmount]](../models/commercediscountredemptionresponseamount.md) | :heavy_minus_sign: | How much this discount takes off the subscription item's next renewal charge.
Present for either effect when next-payment data is available. | +| `cycles_remaining` | *Nullable[int]* | :heavy_check_mark: | Remaining billing cycles the discount applies to. Null means the discount lasts forever. | +| `cycles_applied` | *int* | :heavy_check_mark: | Number of billing cycles the discount has already been applied to. | +| `status` | [Optional[models.CommerceDiscountRedemptionResponseStatus]](../models/commercediscountredemptionresponsestatus.md) | :heavy_minus_sign: | Current status of the discount redemption. | +| `redeemed_at` | *int* | :heavy_check_mark: | Unix timestamp (in milliseconds) when the discount was redeemed. | +| `redeemed_by` | *Nullable[str]* | :heavy_check_mark: | Identifier of the actor that redeemed the discount, when available. | \ No newline at end of file diff --git a/docs/models/commercediscountredemptionresponseamount.md b/docs/models/commercediscountredemptionresponseamount.md new file mode 100644 index 00000000..1b2052ad --- /dev/null +++ b/docs/models/commercediscountredemptionresponseamount.md @@ -0,0 +1,14 @@ +# CommerceDiscountRedemptionResponseAmount + +How much this discount takes off the subscription item's next renewal charge. +Present for either effect when next-payment data is available. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `amount` | *int* | :heavy_check_mark: | The amount in cents. | +| `amount_formatted` | *str* | :heavy_check_mark: | The formatted amount as a string (e.g., "$49.99"). | +| `currency` | *str* | :heavy_check_mark: | The currency code (e.g., "USD"). | +| `currency_symbol` | *str* | :heavy_check_mark: | The currency symbol (e.g., "$"). | \ No newline at end of file diff --git a/docs/models/commercediscountredemptionresponseobject.md b/docs/models/commercediscountredemptionresponseobject.md new file mode 100644 index 00000000..69744b42 --- /dev/null +++ b/docs/models/commercediscountredemptionresponseobject.md @@ -0,0 +1,18 @@ +# CommerceDiscountRedemptionResponseObject + +String representing the object's type. Objects of the same type share the same value. + +## Example Usage + +```python +from clerk_backend_api.models import CommerceDiscountRedemptionResponseObject + +value = CommerceDiscountRedemptionResponseObject.COMMERCE_DISCOUNT_REDEMPTION +``` + + +## Values + +| Name | Value | +| ------------------------------ | ------------------------------ | +| `COMMERCE_DISCOUNT_REDEMPTION` | commerce_discount_redemption | \ No newline at end of file diff --git a/docs/models/commercediscountredemptionresponsestatus.md b/docs/models/commercediscountredemptionresponsestatus.md new file mode 100644 index 00000000..852ca172 --- /dev/null +++ b/docs/models/commercediscountredemptionresponsestatus.md @@ -0,0 +1,20 @@ +# CommerceDiscountRedemptionResponseStatus + +Current status of the discount redemption. + +## Example Usage + +```python +from clerk_backend_api.models import CommerceDiscountRedemptionResponseStatus + +value = CommerceDiscountRedemptionResponseStatus.ACTIVE +``` + + +## Values + +| Name | Value | +| ----------- | ----------- | +| `ACTIVE` | active | +| `EXHAUSTED` | exhausted | +| `REMOVED` | removed | \ No newline at end of file diff --git a/docs/models/createbillingpricerequest.md b/docs/models/createbillingpricerequest.md index c22de317..6bbdc8ab 100644 --- a/docs/models/createbillingpricerequest.md +++ b/docs/models/createbillingpricerequest.md @@ -3,11 +3,11 @@ ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | -| `plan_id` | *str* | :heavy_check_mark: | The ID of the plan this price belongs to. | -| `currency` | *Optional[str]* | :heavy_minus_sign: | The currency code (e.g., "USD"). Defaults to USD. | -| `amount` | *Nullable[int]* | :heavy_check_mark: | The monthly amount in cents. Must be at least $1 (100 cents) if not null. | -| `annual_monthly_amount` | *OptionalNullable[int]* | :heavy_minus_sign: | The monthly amount in cents when billed annually. Must be at least $1 (100 cents) if not null. | -| `description` | *Optional[str]* | :heavy_minus_sign: | An optional description for this custom price. | -| `supported_billing_periods` | [Optional[models.CreateBillingPriceRequestSupportedBillingPeriods]](../models/createbillingpricerequestsupportedbillingperiods.md) | :heavy_minus_sign: | Which billing periods this price supports. Inferred from amounts if omitted. | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| `plan_id` | *str* | :heavy_check_mark: | The ID of the plan this price belongs to. | +| `currency` | *Optional[str]* | :heavy_minus_sign: | The currency code (e.g., "USD"). Defaults to USD. | +| `amount` | *Nullable[int]* | :heavy_check_mark: | The monthly amount in cents. Use `0` for a complimentary price. Positive amounts must be at least $1 (100 cents). | +| `annual_monthly_amount` | *OptionalNullable[int]* | :heavy_minus_sign: | The monthly amount in cents when billed annually. Use `0` for a complimentary price. Positive amounts must be at least $1 (100 cents). | +| `description` | *Optional[str]* | :heavy_minus_sign: | An optional description for this custom price. | +| `supported_billing_periods` | [Optional[models.CreateBillingPriceRequestSupportedBillingPeriods]](../models/createbillingpricerequestsupportedbillingperiods.md) | :heavy_minus_sign: | Which billing periods this price supports. Inferred from amounts if omitted. | \ No newline at end of file diff --git a/docs/models/createdirectorygrouprolemappingrequest.md b/docs/models/createdirectorygrouprolemappingrequest.md new file mode 100644 index 00000000..950d477b --- /dev/null +++ b/docs/models/createdirectorygrouprolemappingrequest.md @@ -0,0 +1,9 @@ +# CreateDirectoryGroupRoleMappingRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | +| `directory_id` | *str* | :heavy_check_mark: | The ID of the directory. | +| `request_body` | [models.CreateDirectoryGroupRoleMappingRequestBody](../models/createdirectorygrouprolemappingrequestbody.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/createdirectorygrouprolemappingrequestbody.md b/docs/models/createdirectorygrouprolemappingrequestbody.md new file mode 100644 index 00000000..b58fb822 --- /dev/null +++ b/docs/models/createdirectorygrouprolemappingrequestbody.md @@ -0,0 +1,11 @@ +# CreateDirectoryGroupRoleMappingRequestBody + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `directory_group_id` | *Optional[str]* | :heavy_minus_sign: | The group ID from the identity provider. Exactly one of `directory_group_id` or `scim_group_id` is required. | +| `scim_group_id` | *Optional[str]* | :heavy_minus_sign: | The legacy name for `directory_group_id`. Send either one, or both with the same value; sending both with different values is rejected. | +| `role_id` | *str* | :heavy_check_mark: | The ID of the organization role to assign to members of the group. | +| `precedence` | *Optional[int]* | :heavy_minus_sign: | The precedence for this mapping. Lower values take priority when a user belongs
to multiple mapped groups. If omitted, the mapping is appended with the
next-highest precedence. | \ No newline at end of file diff --git a/docs/models/createdirectorygrouprolemappings.md b/docs/models/createdirectorygrouprolemappings.md new file mode 100644 index 00000000..996168ab --- /dev/null +++ b/docs/models/createdirectorygrouprolemappings.md @@ -0,0 +1,13 @@ +# CreateDirectoryGroupRoleMappings + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| `directory_group_id` | *Optional[str]* | :heavy_minus_sign: | The group ID from the identity provider. Exactly one of `directory_group_id` or `scim_group_id` is required. | +| `scim_group_id` | *Optional[str]* | :heavy_minus_sign: | The legacy name for `directory_group_id`. Send either one, or both with the same value; sending both with different values is rejected. | +| `directory_group_display_name` | *Optional[str]* | :heavy_minus_sign: | Optional display name for the group. | +| `scim_group_display_name` | *Optional[str]* | :heavy_minus_sign: | The legacy name for `directory_group_display_name`. Send either one, or both with the same value; sending both with different values is rejected. | +| `role_id` | *str* | :heavy_check_mark: | The organization role ID to assign to members of the group. | +| `precedence` | *Optional[int]* | :heavy_minus_sign: | The precedence for this mapping. If omitted, precedence is assigned by array order. | \ No newline at end of file diff --git a/docs/models/createdirectoryrequestbody.md b/docs/models/createdirectoryrequestbody.md new file mode 100644 index 00000000..704002b7 --- /dev/null +++ b/docs/models/createdirectoryrequestbody.md @@ -0,0 +1,11 @@ +# CreateDirectoryRequestBody + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | +| `enterprise_connection_id` | *str* | :heavy_check_mark: | The ID of the enterprise connection to associate with this directory. | +| `name` | *Optional[str]* | :heavy_minus_sign: | A human-friendly name for the directory. | +| `provider` | *str* | :heavy_check_mark: | The identity provider for this directory. | +| `group_role_mappings` | List[[models.CreateDirectoryGroupRoleMappings](../models/createdirectorygrouprolemappings.md)] | :heavy_minus_sign: | Optional directory group to organization role mappings to create with the directory. | \ No newline at end of file diff --git a/docs/models/createenterpriseconnectioncustomattributes.md b/docs/models/createenterpriseconnectioncustomattributes.md index c29c07de..66ba2b5f 100644 --- a/docs/models/createenterpriseconnectioncustomattributes.md +++ b/docs/models/createenterpriseconnectioncustomattributes.md @@ -9,4 +9,5 @@ | `key` | *str* | :heavy_check_mark: | Key used to store the attribute in the user's metadata | | `sso_path` | *Optional[str]* | :heavy_minus_sign: | Path to extract the attribute value from SSO claims | | `scim_path` | *Optional[str]* | :heavy_minus_sign: | GJSON path to extract the attribute value from SCIM user resources | +| `directory_path` | *Optional[str]* | :heavy_minus_sign: | The new name for `scim_path`. Send either one, or both with the same value; sending both with different values is rejected. | | `multi_valued` | *Optional[bool]* | :heavy_minus_sign: | When true, the attribute supports multiple values; values from the IdP are written to public_metadata as an array. Defaults to false. | \ No newline at end of file diff --git a/docs/models/createoauthapplicationrequestbody.md b/docs/models/createoauthapplicationrequestbody.md index ff89eabb..502f3715 100644 --- a/docs/models/createoauthapplicationrequestbody.md +++ b/docs/models/createoauthapplicationrequestbody.md @@ -3,12 +3,13 @@ ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `name` | *str* | :heavy_check_mark: | The name of the new OAuth application.
Max length: 256 | Example App | -| `redirect_uris` | List[*str*] | :heavy_minus_sign: | An array of redirect URIs of the new OAuth application | | -| ~~`callback_url`~~ | *OptionalNullable[str]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

The callback URL of the new OAuth application | https://example.com/oauth/callback | -| `scopes` | *OptionalNullable[str]* | :heavy_minus_sign: | Define the allowed scopes for the new OAuth applications that dictate the user payload of the OAuth user info endpoint. Available scopes are `profile`, `email`, `public_metadata`, `private_metadata`. Provide the requested scopes as a string, separated by spaces. | profile email public_metadata | -| `consent_screen_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | True to enable a consent screen to display in the authentication flow. | | -| `pkce_required` | *OptionalNullable[bool]* | :heavy_minus_sign: | True to require the Proof Key of Code Exchange (PKCE) flow. | | -| `public` | *OptionalNullable[bool]* | :heavy_minus_sign: | If true, this client is public and you can use the Proof Key of Code Exchange (PKCE) flow. | true | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `name` | *str* | :heavy_check_mark: | The name of the new OAuth application.
Max length: 256 | Example App | +| `redirect_uris` | List[*str*] | :heavy_minus_sign: | An array of redirect URIs of the new OAuth application | | +| ~~`callback_url`~~ | *OptionalNullable[str]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

The callback URL of the new OAuth application | https://example.com/oauth/callback | +| `scopes` | *OptionalNullable[str]* | :heavy_minus_sign: | Define the application's built-in and custom scope ceiling. Provide scope keys as a space-delimited string. Custom keys must exist in the instance OAuth scope catalog. | profile email public_metadata | +| `consent_screen_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | True to enable a consent screen to display in the authentication flow. | | +| `pkce_required` | *OptionalNullable[bool]* | :heavy_minus_sign: | True to require the Proof Key of Code Exchange (PKCE) flow. | | +| `device_authorization_grant_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | True to enable the OAuth Device Authorization Grant for this application. Enabling requires the OAuth Device Authorization Grant feature to be enabled for the instance. | | +| `public` | *OptionalNullable[bool]* | :heavy_minus_sign: | If true, this client is public and you can use the Proof Key of Code Exchange (PKCE) flow. | true | \ No newline at end of file diff --git a/docs/models/createscimdirectoryrequestbody.md b/docs/models/createscimdirectoryrequestbody.md index fb02290e..1ef252f0 100644 --- a/docs/models/createscimdirectoryrequestbody.md +++ b/docs/models/createscimdirectoryrequestbody.md @@ -5,7 +5,7 @@ | Field | Type | Required | Description | | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | -| `enterprise_connection_id` | *str* | :heavy_check_mark: | The ID of the enterprise connection to associate with this SCIM directory. | -| `name` | *Optional[str]* | :heavy_minus_sign: | A human-friendly name for the SCIM directory. | -| `provider` | *str* | :heavy_check_mark: | The identity provider for this SCIM directory. | +| `enterprise_connection_id` | *str* | :heavy_check_mark: | The ID of the enterprise connection to associate with this directory. | +| `name` | *Optional[str]* | :heavy_minus_sign: | A human-friendly name for the directory. | +| `provider` | *str* | :heavy_check_mark: | The identity provider for this directory. | | `group_role_mappings` | List[[models.GroupRoleMappings](../models/grouprolemappings.md)] | :heavy_minus_sign: | Optional SCIM group to organization role mappings to create with the directory. | \ No newline at end of file diff --git a/docs/models/createscimgrouprolemappingrequest.md b/docs/models/createscimgrouprolemappingrequest.md index 0545b089..9988d51c 100644 --- a/docs/models/createscimgrouprolemappingrequest.md +++ b/docs/models/createscimgrouprolemappingrequest.md @@ -5,5 +5,5 @@ | Field | Type | Required | Description | | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the SCIM directory. | +| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the directory. | | `request_body` | [models.CreateSCIMGroupRoleMappingRequestBody](../models/createscimgrouprolemappingrequestbody.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/createuserrequestbody.md b/docs/models/createuserrequestbody.md index 70f2edbe..9e0bae82 100644 --- a/docs/models/createuserrequestbody.md +++ b/docs/models/createuserrequestbody.md @@ -20,6 +20,7 @@ | `password_hasher` | *Optional[str]* | :heavy_minus_sign: | The hashing algorithm that was used to generate the password digest.

The algorithms we support at the moment are [`bcrypt`](https://en.wikipedia.org/wiki/Bcrypt), [`bcrypt_sha256_django`](https://docs.djangoproject.com/en/4.0/topics/auth/passwords/), [`md5`](https://en.wikipedia.org/wiki/MD5), `pbkdf2_sha1`, `pbkdf2_sha256`, [`pbkdf2_sha256_django`](https://docs.djangoproject.com/en/4.0/topics/auth/passwords/),
`pbkdf2_sha512`, [`phpass`](https://www.openwall.com/phpass/), `md5_phpass`, [`scrypt_firebase`](https://firebaseopensource.com/projects/firebase/scrypt/),
[`scrypt_werkzeug`](https://werkzeug.palletsprojects.com/en/3.0.x/utils/#werkzeug.security.generate_password_hash), [`sha256`](https://en.wikipedia.org/wiki/SHA-2),
[`ldap_ssha`](https://www.openldap.org/faq/data/cache/347.html), the [`argon2`](https://argon2.online/) variants: `argon2i` and `argon2id`, `sha512_symfony`, the SHA-512 variant of the [Symfony](https://symfony.com/doc/current/security/passwords.html) legacy hasher,
and `pbkdf2_sha512_hex`, a variant of `pbkdf2_sha512` that accepts hex-encoded salt and hash.

Each of the supported hashers expects the incoming digest to be in a particular format. See the [Clerk docs](https://clerk.com/docs/references/backend/user/create-user) for more information. | | | `skip_password_checks` | *OptionalNullable[bool]* | :heavy_minus_sign: | When set to `true` all password checks are skipped.
It is recommended to use this method only when migrating plaintext passwords to Clerk.
Upon migration the user base should be prompted to pick stronger password. | false | | `skip_password_requirement` | *OptionalNullable[bool]* | :heavy_minus_sign: | When set to `true`, `password` is not required anymore when creating the user and can be omitted.
This is useful when you are trying to create a user that doesn't have a password, in an instance that is using passwords.
Please note that you cannot use this flag if password is the only way for a user to sign into your instance. | false | +| `skip_restriction_checks` | *OptionalNullable[bool]* | :heavy_minus_sign: | When set to `true`, the instance's restrictions are not applied to this user.
Those settings are the allowlist, the blocklist, blocked disposable email domains and blocked email subaddresses, and they normally reject a matching identifier here just as they do at sign-up.
Use this when your backend is creating a user it already trusts, such as during a migration or from an admin tool. | | | `totp_secret` | *OptionalNullable[str]* | :heavy_minus_sign: | In case TOTP is configured on the instance, you can provide the secret to enable it on the newly created user without the need to reset it.
Please note that currently the supported options are:
* Period: 30 seconds
* Code length: 6 digits
* Algorithm: SHA1 | base32totpsecretkey | | `backup_codes` | List[*str*] | :heavy_minus_sign: | If Backup Codes are configured on the instance, you can provide them to enable it on the newly created user without the need to reset them.
You must provide the backup codes in plain format or the corresponding bcrypt digest. | [
"123456",
"654321"
] | | `public_metadata` | Dict[str, *Any*] | :heavy_minus_sign: | Metadata saved on the user, that is visible to both your Frontend and Backend APIs | {
"role": "user"
} | @@ -32,6 +33,6 @@ | `create_organization_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | If enabled, user can create organizations via FAPI.
| | | `create_organizations_limit` | *OptionalNullable[int]* | :heavy_minus_sign: | The maximum number of organizations the user can create. 0 means unlimited.
| | | `created_at` | *OptionalNullable[str]* | :heavy_minus_sign: | A custom date/time denoting _when_ the user signed up to the application, specified in RFC3339 format (e.g. `2012-10-20T07:15:20.902Z`). | 2023-03-15T07:15:20.902Z | -| `bypass_client_trust` | *OptionalNullable[bool]* | :heavy_minus_sign: | When set to `true`, the user will bypass client trust checks during sign-in. | | +| `bypass_client_trust` | *OptionalNullable[bool]* | :heavy_minus_sign: | When set to `true`, the user will bypass Device Trust checks during sign-in. | | | `banned` | *OptionalNullable[bool]* | :heavy_minus_sign: | When set to `true`, the user is created already banned and cannot sign in.
Requires the same plan support as the ban user endpoint. | | | `locked` | *OptionalNullable[bool]* | :heavy_minus_sign: | When set to `true`, the user is created already locked.
Requires the user lockout feature to be enabled on the instance. | | \ No newline at end of file diff --git a/docs/models/customattributes.md b/docs/models/customattributes.md index bde59d99..8c681807 100644 --- a/docs/models/customattributes.md +++ b/docs/models/customattributes.md @@ -9,4 +9,5 @@ | `key` | *str* | :heavy_check_mark: | Key used to store the attribute in the user's public/private/unsafe metadata | | `sso_path` | *Optional[str]* | :heavy_minus_sign: | Path to extract the attribute value from SSO claims (SAML assertions or OIDC claims) | | `scim_path` | *Optional[str]* | :heavy_minus_sign: | GJSON path to extract the attribute value from SCIM user resources | +| `directory_path` | *Optional[str]* | :heavy_minus_sign: | GJSON path to extract the attribute value from directory sync user resources. Same value as `scim_path`. | | `multi_valued` | *Optional[bool]* | :heavy_minus_sign: | When true, the attribute supports multiple values; values from the IdP are written to public_metadata as an array. Defaults to false. | \ No newline at end of file diff --git a/docs/models/deletedirectorygrouprolemappingrequest.md b/docs/models/deletedirectorygrouprolemappingrequest.md new file mode 100644 index 00000000..a2265c10 --- /dev/null +++ b/docs/models/deletedirectorygrouprolemappingrequest.md @@ -0,0 +1,9 @@ +# DeleteDirectoryGroupRoleMappingRequest + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | +| `directory_id` | *str* | :heavy_check_mark: | The ID of the directory. | +| `mapping_id` | *str* | :heavy_check_mark: | The ID of the directory group role mapping to delete. | \ No newline at end of file diff --git a/docs/models/deletedirectoryrequest.md b/docs/models/deletedirectoryrequest.md new file mode 100644 index 00000000..4a4b6bcf --- /dev/null +++ b/docs/models/deletedirectoryrequest.md @@ -0,0 +1,8 @@ +# DeleteDirectoryRequest + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- | +| `directory_id` | *str* | :heavy_check_mark: | The ID of the directory to delete | \ No newline at end of file diff --git a/docs/models/deletescimdirectoryrequest.md b/docs/models/deletescimdirectoryrequest.md index adfb92e9..0309e3ad 100644 --- a/docs/models/deletescimdirectoryrequest.md +++ b/docs/models/deletescimdirectoryrequest.md @@ -3,6 +3,6 @@ ## Fields -| Field | Type | Required | Description | -| -------------------------------------- | -------------------------------------- | -------------------------------------- | -------------------------------------- | -| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the SCIM directory to delete | \ No newline at end of file +| Field | Type | Required | Description | +| --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- | +| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the directory to delete | \ No newline at end of file diff --git a/docs/models/deletescimgrouprolemappingrequest.md b/docs/models/deletescimgrouprolemappingrequest.md index ae62890c..91b3eac3 100644 --- a/docs/models/deletescimgrouprolemappingrequest.md +++ b/docs/models/deletescimgrouprolemappingrequest.md @@ -5,5 +5,5 @@ | Field | Type | Required | Description | | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | -| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the SCIM directory. | +| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the directory. | | `mapping_id` | *str* | :heavy_check_mark: | The ID of the SCIM group role mapping to delete. | \ No newline at end of file diff --git a/docs/models/directory.md b/docs/models/directory.md new file mode 100644 index 00000000..57770c03 --- /dev/null +++ b/docs/models/directory.md @@ -0,0 +1,22 @@ +# Directory + +A directory configuration for provisioning users from an identity provider. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `object` | [models.DirectoryObject](../models/directoryobject.md) | :heavy_check_mark: | String representing the object's type. Always "directory". | +| `id` | *str* | :heavy_check_mark: | Unique identifier for the directory. | +| `name` | *str* | :heavy_check_mark: | A human-friendly name for the directory. | +| `enterprise_connection_id` | *OptionalNullable[str]* | :heavy_minus_sign: | The ID of the associated enterprise connection. | +| `endpoint_url` | *str* | :heavy_check_mark: | The provisioning endpoint URL for this directory. | +| `provider` | *str* | :heavy_check_mark: | The identity provider for this directory. | +| `enabled` | *bool* | :heavy_check_mark: | Whether the directory is enabled. | +| `group_role_mapping_enabled` | *bool* | :heavy_check_mark: | Whether group-to-role mapping is enabled for this directory. | +| `attribute_mapping` | Dict[str, *str*] | :heavy_check_mark: | Mapping of user attributes to the directory attribute paths they are extracted from. | +| `custom_attributes` | List[[models.DirectoryCustomAttributes](../models/directorycustomattributes.md)] | :heavy_minus_sign: | Custom attributes to map from the IdP to the user's profile via directory sync. Requires the custom attributes feature to be enabled for the instance. | +| `api_key` | *OptionalNullable[str]* | :heavy_minus_sign: | The API key for authenticating provisioning requests. Only returned when the directory is created or the key is rotated. | +| `created_at` | *int* | :heavy_check_mark: | Unix timestamp when the directory was created. | +| `updated_at` | *int* | :heavy_check_mark: | Unix timestamp when the directory was last updated. | \ No newline at end of file diff --git a/docs/models/directorycustomattributes.md b/docs/models/directorycustomattributes.md new file mode 100644 index 00000000..9c6403c8 --- /dev/null +++ b/docs/models/directorycustomattributes.md @@ -0,0 +1,13 @@ +# DirectoryCustomAttributes + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| `name` | *Optional[str]* | :heavy_minus_sign: | Display name for the custom attribute | +| `key` | *Optional[str]* | :heavy_minus_sign: | Key used to store the attribute in the user's public/private/unsafe metadata | +| `sso_path` | *Optional[str]* | :heavy_minus_sign: | Path to extract the attribute value from SSO claims (SAML assertions or OIDC claims) | +| `scim_path` | *Optional[str]* | :heavy_minus_sign: | The legacy name for `directory_path`. Carries the same value. | +| `directory_path` | *Optional[str]* | :heavy_minus_sign: | GJSON path to extract the attribute value from directory sync user resources | +| `multi_valued` | *Optional[bool]* | :heavy_minus_sign: | When true, the attribute supports multiple values; values from the IdP are written to public_metadata as an array. Defaults to false. | \ No newline at end of file diff --git a/docs/models/directorygrouprolemapping.md b/docs/models/directorygrouprolemapping.md new file mode 100644 index 00000000..59d9b5a2 --- /dev/null +++ b/docs/models/directorygrouprolemapping.md @@ -0,0 +1,21 @@ +# DirectoryGroupRoleMapping + +A mapping from a directory group to an organization role. Members of the group are assigned the role; the lowest-precedence match wins when a user belongs to multiple mapped groups. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | +| `object` | [models.DirectoryGroupRoleMappingObject](../models/directorygrouprolemappingobject.md) | :heavy_check_mark: | String representing the object's type. Always "directory_group_role_mapping". | +| `id` | *str* | :heavy_check_mark: | Unique identifier for the directory group role mapping. | +| `directory_id` | *str* | :heavy_check_mark: | The ID of the directory this mapping belongs to. | +| `scim_directory_id` | *str* | :heavy_check_mark: | The legacy name for `directory_id`. Carries the same value. | +| `directory_group_id` | *str* | :heavy_check_mark: | The group ID from the identity provider. | +| `scim_group_id` | *str* | :heavy_check_mark: | The legacy name for `directory_group_id`. Carries the same value. | +| `directory_group_display_name` | *str* | :heavy_check_mark: | The display name of the group, as reported by the identity provider. | +| `scim_group_display_name` | *str* | :heavy_check_mark: | The legacy name for `directory_group_display_name`. Carries the same value. | +| `role` | [Optional[models.Role]](../models/role.md) | :heavy_minus_sign: | N/A | +| `precedence` | *int* | :heavy_check_mark: | Mapping precedence, starting at 1. Lower values take priority when a user belongs to multiple mapped groups. | +| `created_at` | *int* | :heavy_check_mark: | Unix timestamp (milliseconds) of when the mapping was created. | +| `updated_at` | *int* | :heavy_check_mark: | Unix timestamp (milliseconds) of when the mapping was last updated. | \ No newline at end of file diff --git a/docs/models/directorygrouprolemappingdeleted.md b/docs/models/directorygrouprolemappingdeleted.md new file mode 100644 index 00000000..73bdbd38 --- /dev/null +++ b/docs/models/directorygrouprolemappingdeleted.md @@ -0,0 +1,12 @@ +# DirectoryGroupRoleMappingDeleted + +A directory group role mapping was deleted. + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| `object` | [models.DirectoryGroupRoleMappingDeletedObject](../models/directorygrouprolemappingdeletedobject.md) | :heavy_check_mark: | String representing the object's type. | +| `id` | *str* | :heavy_check_mark: | The ID of the deleted directory group role mapping. | +| `deleted` | *Literal[True]* | :heavy_check_mark: | Whether the directory group role mapping was successfully deleted. | \ No newline at end of file diff --git a/docs/models/directorygrouprolemappingdeletedobject.md b/docs/models/directorygrouprolemappingdeletedobject.md new file mode 100644 index 00000000..e6b1b86b --- /dev/null +++ b/docs/models/directorygrouprolemappingdeletedobject.md @@ -0,0 +1,18 @@ +# DirectoryGroupRoleMappingDeletedObject + +String representing the object's type. + +## Example Usage + +```python +from clerk_backend_api.models import DirectoryGroupRoleMappingDeletedObject + +value = DirectoryGroupRoleMappingDeletedObject.DIRECTORY_GROUP_ROLE_MAPPING +``` + + +## Values + +| Name | Value | +| ------------------------------ | ------------------------------ | +| `DIRECTORY_GROUP_ROLE_MAPPING` | directory_group_role_mapping | \ No newline at end of file diff --git a/docs/models/directorygrouprolemappinglist.md b/docs/models/directorygrouprolemappinglist.md new file mode 100644 index 00000000..c0e2f35d --- /dev/null +++ b/docs/models/directorygrouprolemappinglist.md @@ -0,0 +1,11 @@ +# DirectoryGroupRoleMappingList + +A list of directory group role mappings, ordered by precedence. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| `data` | List[[models.DirectoryGroupRoleMapping](../models/directorygrouprolemapping.md)] | :heavy_check_mark: | N/A | +| `total_count` | *int* | :heavy_check_mark: | Total number of directory group role mappings in the directory. | \ No newline at end of file diff --git a/docs/models/directorygrouprolemappingobject.md b/docs/models/directorygrouprolemappingobject.md new file mode 100644 index 00000000..aad750ca --- /dev/null +++ b/docs/models/directorygrouprolemappingobject.md @@ -0,0 +1,18 @@ +# DirectoryGroupRoleMappingObject + +String representing the object's type. Always "directory_group_role_mapping". + +## Example Usage + +```python +from clerk_backend_api.models import DirectoryGroupRoleMappingObject + +value = DirectoryGroupRoleMappingObject.DIRECTORY_GROUP_ROLE_MAPPING +``` + + +## Values + +| Name | Value | +| ------------------------------ | ------------------------------ | +| `DIRECTORY_GROUP_ROLE_MAPPING` | directory_group_role_mapping | \ No newline at end of file diff --git a/docs/models/directorylist.md b/docs/models/directorylist.md new file mode 100644 index 00000000..d08283ac --- /dev/null +++ b/docs/models/directorylist.md @@ -0,0 +1,11 @@ +# DirectoryList + +A list of directories + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | +| `data` | List[[models.Directory](../models/directory.md)] | :heavy_check_mark: | N/A | +| `total_count` | *int* | :heavy_check_mark: | Total number of directories. | \ No newline at end of file diff --git a/docs/models/directoryobject.md b/docs/models/directoryobject.md new file mode 100644 index 00000000..289d0a9d --- /dev/null +++ b/docs/models/directoryobject.md @@ -0,0 +1,18 @@ +# DirectoryObject + +String representing the object's type. Always "directory". + +## Example Usage + +```python +from clerk_backend_api.models import DirectoryObject + +value = DirectoryObject.DIRECTORY +``` + + +## Values + +| Name | Value | +| ----------- | ----------- | +| `DIRECTORY` | directory | \ No newline at end of file diff --git a/docs/models/dnstarget.md b/docs/models/dnstarget.md new file mode 100644 index 00000000..8ac13dce --- /dev/null +++ b/docs/models/dnstarget.md @@ -0,0 +1,12 @@ +# DNSTarget + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | +| `host` | *str* | :heavy_check_mark: | N/A | +| `value` | *str* | :heavy_check_mark: | N/A | +| `record_type` | [models.RecordType](../models/recordtype.md) | :heavy_check_mark: | N/A | +| `automation_disposition` | [Optional[models.AutomationDisposition]](../models/automationdisposition.md) | :heavy_minus_sign: | N/A | +| `required` | *bool* | :heavy_check_mark: | Denotes whether this DNS target is required to be set in order for the domain to be considered deployed.
| \ No newline at end of file diff --git a/docs/models/domain.md b/docs/models/domain.md index 263366c8..abc1e69d 100644 --- a/docs/models/domain.md +++ b/docs/models/domain.md @@ -3,14 +3,15 @@ ## Fields -| Field | Type | Required | Description | Example | -| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | -| `object` | [models.DomainObject](../models/domainobject.md) | :heavy_check_mark: | N/A | domain | -| `id` | *str* | :heavy_check_mark: | N/A | domain_id | -| `name` | *str* | :heavy_check_mark: | N/A | example.com | -| `is_satellite` | *bool* | :heavy_check_mark: | N/A | false | -| `frontend_api_url` | *str* | :heavy_check_mark: | N/A | https://frontend.example.com | -| `accounts_portal_url` | *OptionalNullable[str]* | :heavy_minus_sign: | Null for satellite domains.
| null | -| `proxy_url` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | null | -| `development_origin` | *str* | :heavy_check_mark: | N/A | http://localhost:3000 | -| `cname_targets` | List[[models.CNameTarget](../models/cnametarget.md)] | :heavy_minus_sign: | N/A | [
{
"host": "example-host.clerk.com",
"value": "example-value.clerk.services",
"required": true
}
] | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | +| `object` | [models.DomainObject](../models/domainobject.md) | :heavy_check_mark: | N/A | domain | +| `id` | *str* | :heavy_check_mark: | N/A | domain_id | +| `name` | *str* | :heavy_check_mark: | N/A | example.com | +| `is_satellite` | *bool* | :heavy_check_mark: | N/A | false | +| `frontend_api_url` | *str* | :heavy_check_mark: | N/A | https://frontend.example.com | +| `accounts_portal_url` | *OptionalNullable[str]* | :heavy_minus_sign: | Null for satellite domains.
| null | +| `proxy_url` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | null | +| `development_origin` | *str* | :heavy_check_mark: | N/A | http://localhost:3000 | +| `cname_targets` | List[[models.CNameTarget](../models/cnametarget.md)] | :heavy_minus_sign: | Legacy CNAME-only DNS targets. Prefer `dns_targets` when present. | [
{
"host": "example-host.clerk.com",
"value": "example-value.clerk.services",
"required": true
}
] | +| `dns_targets` | List[[models.DNSTarget](../models/dnstarget.md)] | :heavy_minus_sign: | The complete typed DNS contract. Consumers should use this field instead of merging it with `cname_targets`.
| | \ No newline at end of file diff --git a/docs/models/effect.md b/docs/models/effect.md new file mode 100644 index 00000000..271ef55b --- /dev/null +++ b/docs/models/effect.md @@ -0,0 +1,19 @@ +# Effect + +The snapshotted discount effect. + +## Example Usage + +```python +from clerk_backend_api.models import Effect + +value = Effect.PERCENTAGE +``` + + +## Values + +| Name | Value | +| -------------- | -------------- | +| `PERCENTAGE` | percentage | +| `FIXED_AMOUNT` | fixed_amount | \ No newline at end of file diff --git a/docs/models/getdirectoryrequest.md b/docs/models/getdirectoryrequest.md new file mode 100644 index 00000000..1a722df6 --- /dev/null +++ b/docs/models/getdirectoryrequest.md @@ -0,0 +1,8 @@ +# GetDirectoryRequest + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `directory_id` | *str* | :heavy_check_mark: | The ID of the directory to retrieve | \ No newline at end of file diff --git a/docs/models/getscimdirectoryrequest.md b/docs/models/getscimdirectoryrequest.md index 35d4c28a..b67531b9 100644 --- a/docs/models/getscimdirectoryrequest.md +++ b/docs/models/getscimdirectoryrequest.md @@ -3,6 +3,6 @@ ## Fields -| Field | Type | Required | Description | -| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | -| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the SCIM directory to retrieve | \ No newline at end of file +| Field | Type | Required | Description | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the directory to retrieve | \ No newline at end of file diff --git a/docs/models/getuserlistrequest.md b/docs/models/getuserlistrequest.md index 032f7feb..6d24e259 100644 --- a/docs/models/getuserlistrequest.md +++ b/docs/models/getuserlistrequest.md @@ -3,30 +3,31 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `email_address` | List[*str*] | :heavy_minus_sign: | Returns users with the specified email addresses.
Accepts up to 100 email addresses.
Any email addresses not found are ignored. | [
"test@example.com"
] | -| `phone_number` | List[*str*] | :heavy_minus_sign: | Returns users with the specified phone numbers.
Accepts up to 100 phone numbers.
Any phone numbers not found are ignored. | [
"+12345678901"
] | -| `external_id` | List[*str*] | :heavy_minus_sign: | Returns users with the specified external IDs.
For each external ID, the `+` and `-` can be
prepended to the ID, which denote whether the
respective external ID should be included or
excluded from the result set.
Accepts up to 100 external IDs.
Any external IDs not found are ignored. | [
"external-id-123"
] | -| `username` | List[*str*] | :heavy_minus_sign: | Returns users with the specified usernames.
Accepts up to 100 usernames.
Any usernames not found are ignored. | [
"user123"
] | -| `web3_wallet` | List[*str*] | :heavy_minus_sign: | Returns users with the specified web3 wallet addresses.
Accepts up to 100 web3 wallet addresses.
Any web3 wallet addresses not found are ignored. | [
"0x123456789abcdef0x123456789abcdef"
] | -| `user_id` | List[*str*] | :heavy_minus_sign: | Returns users with the user IDs specified.
For each user ID, the `+` and `-` can be
prepended to the ID, which denote whether the
respective user ID should be included or
excluded from the result set.
Accepts up to 100 user IDs.
Any user IDs not found are ignored. | [
"user-id-123"
] | -| `organization_id` | List[*str*] | :heavy_minus_sign: | Returns users that have memberships to the
given organizations.
For each organization ID, the `+` and `-` can be
prepended to the ID, which denote whether the
respective organization should be included or
excluded from the result set.
Accepts up to 100 organization IDs. | [
"org-id-123"
] | -| `query` | *Optional[str]* | :heavy_minus_sign: | Returns users that match the given query.
For possible matches, we check the email addresses, phone numbers, usernames, web3 wallets, user IDs, first and last names.
The query value doesn't need to match the exact value you are looking for, it is capable of partial matches as well. | John | -| `email_address_query` | *Optional[str]* | :heavy_minus_sign: | Returns users with emails that match the given query, via case-insensitive partial match.
For example, `email_address_query=ello` will match a user with the email `HELLO@example.com`. | | -| `phone_number_query` | *Optional[str]* | :heavy_minus_sign: | Returns users with phone numbers that match the given query, via case-insensitive partial match.
For example, `phone_number_query=555` will match a user with the phone number `+1555xxxxxxx`. | | -| `username_query` | *Optional[str]* | :heavy_minus_sign: | Returns users with usernames that match the given query, via case-insensitive partial match.
For example, `username_query=CoolUser` will match a user with the username `SomeCoolUser`. | | -| `name_query` | *Optional[str]* | :heavy_minus_sign: | Returns users with names that match the given query, via case-insensitive partial match. | | -| `banned` | *Optional[bool]* | :heavy_minus_sign: | Returns users which are either banned (`banned=true`) or not banned (`banned=false`). | | -| `last_active_at_before` | *Optional[int]* | :heavy_minus_sign: | Returns users whose last session activity was before the given date (with millisecond precision).
Example: use 1700690400000 to retrieve users whose last session activity was before 2023-11-23. | 1700690400000 | -| `last_active_at_after` | *Optional[int]* | :heavy_minus_sign: | Returns users whose last session activity was after the given date (with millisecond precision).
Example: use 1700690400000 to retrieve users whose last session activity was after 2023-11-23. | 1700690400000 | -| ~~`last_active_at_since`~~ | *Optional[int]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

Returns users that had session activity since the given date.
Example: use 1700690400000 to retrieve users that had session activity from 2023-11-23 until the current day.
Deprecated in favor of `last_active_at_after`. | 1700690400000 | -| `created_at_before` | *Optional[int]* | :heavy_minus_sign: | Returns users who have been created before the given date (with millisecond precision).
Example: use 1730160000000 to retrieve users who have been created before 2024-10-29. | 1730160000000 | -| `created_at_after` | *Optional[int]* | :heavy_minus_sign: | Returns users who have been created after the given date (with millisecond precision).
Example: use 1730160000000 to retrieve users who have been created after 2024-10-29. | 1730160000000 | -| `last_sign_in_at_before` | *Optional[int]* | :heavy_minus_sign: | Returns users whose last sign-in was before the given date (with millisecond precision).
Example: use 1700690400000 to retrieve users whose last sign-in was before 2023-11-23. | 1700690400000 | -| `last_sign_in_at_after` | *Optional[int]* | :heavy_minus_sign: | Returns users whose last sign-in was after the given date (with millisecond precision).
Example: use 1700690400000 to retrieve users whose last sign-in was after 2023-11-23. | 1700690400000 | -| `provider` | *Optional[str]* | :heavy_minus_sign: | Returns users with external accounts for the specified OAuth provider.
Must be used in combination with the `provider_user_id` parameter.
For example, use `provider=oauth_google&provider_user_id=12345` to retrieve a user with Google provider user ID 12345. | | -| `provider_user_id` | List[*str*] | :heavy_minus_sign: | Returns users with the specified provider user IDs for a specific provider.
Must be used in combination with the `provider` parameter.
For example, use `provider=oauth_google&provider_user_id=12345` to retrieve a user with Google provider user ID 12345.
Accepts up to 100 provider user IDs.
Any provider user IDs not found are ignored. | | -| `limit` | *Optional[int]* | :heavy_minus_sign: | Applies a limit to the number of results returned.
Can be used for paginating the results together with `offset`. | 20 | -| `offset` | *Optional[int]* | :heavy_minus_sign: | Skip the first `offset` results when paginating.
Needs to be an integer greater or equal to zero.
To be used in conjunction with `limit`. | 10 | -| `order_by` | *Optional[str]* | :heavy_minus_sign: | Allows to return users in a particular order.
At the moment, you can order the returned users by their `created_at`,`updated_at`,`email_address`,`web3wallet`,`first_name`,`last_name`,`phone_number`,`username`,`last_active_at`,`last_sign_in_at`.
In order to specify the direction, you can use the `+/-` symbols prepended in the property to order by.
For example, if you want users to be returned in descending order according to their `created_at` property, you can use `-created_at`.
If you don't use `+` or `-`, then `+` is implied. We only support one `order_by` parameter, and if multiple `order_by` parameters are provided, we will only keep the first one. For example,
if you pass `order_by=username&order_by=created_at`, we will consider only the first `order_by` parameter, which is `username`. The `created_at` parameter will be ignored in this case. | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `email_address` | List[*str*] | :heavy_minus_sign: | Returns users with the specified email addresses.
Accepts up to 100 email addresses.
Any email addresses not found are ignored. | [
"test@example.com"
] | +| `phone_number` | List[*str*] | :heavy_minus_sign: | Returns users with the specified phone numbers.
Accepts up to 100 phone numbers.
Any phone numbers not found are ignored. | [
"+12345678901"
] | +| `external_id` | List[*str*] | :heavy_minus_sign: | Returns users with the specified external IDs.
For each external ID, the `+` and `-` can be
prepended to the ID, which denote whether the
respective external ID should be included or
excluded from the result set.
Accepts up to 100 external IDs.
Any external IDs not found are ignored. | [
"external-id-123"
] | +| `username` | List[*str*] | :heavy_minus_sign: | Returns users with the specified usernames.
Accepts up to 100 usernames.
Any usernames not found are ignored. | [
"user123"
] | +| `web3_wallet` | List[*str*] | :heavy_minus_sign: | Returns users with the specified web3 wallet addresses.
Accepts up to 100 web3 wallet addresses.
Any web3 wallet addresses not found are ignored. | [
"0x123456789abcdef0x123456789abcdef"
] | +| `user_id` | List[*str*] | :heavy_minus_sign: | Returns users with the user IDs specified.
For each user ID, the `+` and `-` can be
prepended to the ID, which denote whether the
respective user ID should be included or
excluded from the result set.
Accepts up to 100 user IDs.
Any user IDs not found are ignored. | [
"user-id-123"
] | +| `organization_id` | List[*str*] | :heavy_minus_sign: | Returns users that have memberships to the
given organizations.
For each organization ID, the `+` and `-` can be
prepended to the ID, which denote whether the
respective organization should be included or
excluded from the result set.
Accepts up to 100 organization IDs. | [
"org-id-123"
] | +| `query` | *Optional[str]* | :heavy_minus_sign: | Returns users that match the given query.
For possible matches, we check the email addresses, phone numbers, usernames, web3 wallets, user IDs, first and last names.
The query value doesn't need to match the exact value you are looking for, it is capable of partial matches as well. | John | +| `email_address_query` | *Optional[str]* | :heavy_minus_sign: | Returns users with emails that match the given query, via case-insensitive partial match.
For example, `email_address_query=ello` will match a user with the email `HELLO@example.com`. | | +| `phone_number_query` | *Optional[str]* | :heavy_minus_sign: | Returns users with phone numbers that match the given query, via case-insensitive partial match.
For example, `phone_number_query=555` will match a user with the phone number `+1555xxxxxxx`. | | +| `username_query` | *Optional[str]* | :heavy_minus_sign: | Returns users with usernames that match the given query, via case-insensitive partial match.
For example, `username_query=CoolUser` will match a user with the username `SomeCoolUser`. | | +| `name_query` | *Optional[str]* | :heavy_minus_sign: | Returns users with names that match the given query, via case-insensitive partial match. | | +| `banned` | *Optional[bool]* | :heavy_minus_sign: | Returns users which are either banned (`banned=true`) or not banned (`banned=false`). | | +| `last_active_at_before` | *Optional[int]* | :heavy_minus_sign: | Returns users whose last session activity was before the given date (with millisecond precision).
Example: use 1700690400000 to retrieve users whose last session activity was before 2023-11-23. | 1700690400000 | +| `last_active_at_after` | *Optional[int]* | :heavy_minus_sign: | Returns users whose last session activity was after the given date (with millisecond precision).
Example: use 1700690400000 to retrieve users whose last session activity was after 2023-11-23. | 1700690400000 | +| ~~`last_active_at_since`~~ | *Optional[int]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

Returns users that had session activity since the given date.
Example: use 1700690400000 to retrieve users that had session activity from 2023-11-23 until the current day.
Deprecated in favor of `last_active_at_after`. | 1700690400000 | +| `created_at_before` | *Optional[int]* | :heavy_minus_sign: | Returns users who have been created before the given date (with millisecond precision).
Example: use 1730160000000 to retrieve users who have been created before 2024-10-29. | 1730160000000 | +| `created_at_after` | *Optional[int]* | :heavy_minus_sign: | Returns users who have been created after the given date (with millisecond precision).
Example: use 1730160000000 to retrieve users who have been created after 2024-10-29. | 1730160000000 | +| `last_sign_in_at_before` | *Optional[int]* | :heavy_minus_sign: | Returns users whose last sign-in was before the given date (with millisecond precision).
Example: use 1700690400000 to retrieve users whose last sign-in was before 2023-11-23. | 1700690400000 | +| `last_sign_in_at_after` | *Optional[int]* | :heavy_minus_sign: | Returns users whose last sign-in was after the given date (with millisecond precision).
Example: use 1700690400000 to retrieve users whose last sign-in was after 2023-11-23. | 1700690400000 | +| `provider` | *Optional[str]* | :heavy_minus_sign: | Returns users with external accounts for the specified OAuth provider.
Must be used in combination with the `provider_user_id` parameter.
For example, use `provider=oauth_google&provider_user_id=12345` to retrieve a user with Google provider user ID 12345. | | +| `provider_user_id` | List[*str*] | :heavy_minus_sign: | Returns users with the specified provider user IDs for a specific provider.
Must be used in combination with the `provider` parameter.
For example, use `provider=oauth_google&provider_user_id=12345` to retrieve a user with Google provider user ID 12345.
Accepts up to 100 provider user IDs.
Any provider user IDs not found are ignored. | | +| `limit` | *Optional[int]* | :heavy_minus_sign: | Applies a limit to the number of results returned.
Can be used for paginating the results together with `offset`. | 20 | +| `offset` | *Optional[int]* | :heavy_minus_sign: | Skip the first `offset` results when paginating.
Needs to be an integer greater or equal to zero.
To be used in conjunction with `limit`. | 10 | +| `starting_after` | *Optional[str]* | :heavy_minus_sign: | A cursor for pagination: the `id` of the last user on the previous page. Returns the users that follow it.

**Requires ordering by `created_at`** — that is, `order_by` omitted, or set to `created_at`, `+created_at`
or `-created_at`. Any other `order_by` value is rejected with a 422: the other orderings sort by a value
that is neither unique per user nor immutable, so a cursor over them would skip or repeat users.

Cannot be combined with a non-zero `offset`, which is also a 422. Keep every other parameter identical
across requests, and stop when a page returns fewer than `limit` users. | | +| `order_by` | *Optional[str]* | :heavy_minus_sign: | Allows to return users in a particular order.
At the moment, you can order the returned users by their `created_at`,`updated_at`,`email_address`,`web3wallet`,`first_name`,`last_name`,`phone_number`,`username`,`last_active_at`,`last_sign_in_at`.
In order to specify the direction, you can use the `+/-` symbols prepended in the property to order by.
For example, if you want users to be returned in descending order according to their `created_at` property, you can use `-created_at`.
If you don't use `+` or `-`, then `+` is implied. We only support one `order_by` parameter, and if multiple `order_by` parameters are provided, we will only keep the first one. For example,
if you pass `order_by=username&order_by=created_at`, we will consider only the first `order_by` parameter, which is `username`. The `created_at` parameter will be ignored in this case.
Only the `created_at` orderings can be combined with `starting_after` cursor pagination; see that parameter. | | \ No newline at end of file diff --git a/docs/models/instance.md b/docs/models/instance.md index 4c3ecca2..b0a2c2a6 100644 --- a/docs/models/instance.md +++ b/docs/models/instance.md @@ -5,9 +5,12 @@ Success ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | -| `object` | [models.InstanceObject](../models/instanceobject.md) | :heavy_check_mark: | String representing the object's type. Objects of the same type share the same value. | | -| `id` | *str* | :heavy_check_mark: | N/A | | -| `environment_type` | *str* | :heavy_check_mark: | N/A | development | -| `allowed_origins` | List[*str*] | :heavy_check_mark: | N/A | [
"http://localhost:3000",
"https://some-domain"
] | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `object` | [models.InstanceObject](../models/instanceobject.md) | :heavy_check_mark: | String representing the object's type. Objects of the same type share the same value. | | +| `id` | *str* | :heavy_check_mark: | N/A | | +| `environment_type` | *str* | :heavy_check_mark: | N/A | development | +| `allowed_origins` | List[*str*] | :heavy_check_mark: | N/A | [
"http://localhost:3000",
"https://some-domain"
] | +| `allowed_subdomains` | List[*str*] | :heavy_check_mark: | Subdomains of the instance's own domains that may originate requests, when the subdomain allowlist is enabled. Production instances only; always empty on a development instance. | [
"app.example.com",
"*.preview.example.com"
] | +| `subdomain_allowlist_enabled` | *bool* | :heavy_check_mark: | Whether requests from subdomains of the instance's own domains are restricted to `allowed_subdomains`. When false, every subdomain of the instance's domain is accepted. Production instances only; always false on a development instance. | | +| `workspace_id` | *Nullable[str]* | :heavy_check_mark: | The ID of the Clerk workspace that owns the instance's application. It is null when the application has no owner. | org_2abc123def456 | \ No newline at end of file diff --git a/docs/models/instanceprotect.md b/docs/models/instanceprotect.md index e7cade86..4790c15f 100644 --- a/docs/models/instanceprotect.md +++ b/docs/models/instanceprotect.md @@ -5,9 +5,11 @@ Success ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -| `object` | [models.InstanceProtectObject](../models/instanceprotectobject.md) | :heavy_check_mark: | N/A | -| `rules_enabled` | *bool* | :heavy_check_mark: | N/A | -| `specter_enabled` | *bool* | :heavy_check_mark: | N/A | -| `checks_bypassed` | *bool* | :heavy_check_mark: | Whether the instance has opted out of the Protect prerequisite checks, asserting its setup already meets the requirements. | \ No newline at end of file +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `object` | [models.InstanceProtectObject](../models/instanceprotectobject.md) | :heavy_check_mark: | N/A | +| `rules_enabled` | *bool* | :heavy_check_mark: | Whether Protect rules are enforced on this instance. False does not mean the instance is outside Protect — by default it is still evaluated in shadow, where rules are scored and recorded but never block. | +| `specter_enabled` | *bool* | :heavy_check_mark: | N/A | +| `checks_bypassed` | *bool* | :heavy_check_mark: | Whether the instance has opted out of the Protect prerequisite checks, asserting its setup already meets the requirements. | +| `checks_verified` | *bool* | :heavy_check_mark: | Whether the Protect system has verified the instance's prerequisite checks. Protect rules are gated on checks being verified, bypassed or exempt. | +| `checks_exempt` | *bool* | :heavy_check_mark: | Whether the instance was created into Protect and so was never subject to the prerequisite checks at all. | \ No newline at end of file diff --git a/docs/models/instancesettings.md b/docs/models/instancesettings.md index 8f594f0f..e60115f0 100644 --- a/docs/models/instancesettings.md +++ b/docs/models/instancesettings.md @@ -5,11 +5,11 @@ InstanceSettings Server API ## Fields -| Field | Type | Required | Description | Example | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `object` | [Optional[models.InstanceSettingsObject]](../models/instancesettingsobject.md) | :heavy_minus_sign: | String representing the object's type. Objects of the same type share the same value. | instance_settings | -| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | inst_123456789 | -| `restricted_to_allowlist` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | -| `from_email_address` | *Optional[str]* | :heavy_minus_sign: | N/A | noreply@clerk.dev | -| `progressive_sign_up` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | -| ~~`enhanced_email_deliverability`~~ | *Optional[bool]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

Deprecated. When enabled, production authentication emails for this instance are sent through Clerk's legacy managed email delivery path. This setting is being retired; use the instance's configured email sending domain instead.
| true | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `object` | [Optional[models.InstanceSettingsObject]](../models/instancesettingsobject.md) | :heavy_minus_sign: | String representing the object's type. Objects of the same type share the same value. | instance_settings | +| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | inst_123456789 | +| `restricted_to_allowlist` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `from_email_address` | *Optional[str]* | :heavy_minus_sign: | N/A | noreply@clerk.dev | +| `progressive_sign_up` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| ~~`enhanced_email_deliverability`~~ | *Optional[bool]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

Deprecated. This setting is retired and no longer affects email delivery; all email is sent through the instance's configured email sending domain. The field is preserved for API compatibility only and will be removed in a future version.
| true | \ No newline at end of file diff --git a/docs/models/listdirectoriesrequest.md b/docs/models/listdirectoriesrequest.md new file mode 100644 index 00000000..11dd654c --- /dev/null +++ b/docs/models/listdirectoriesrequest.md @@ -0,0 +1,9 @@ +# ListDirectoriesRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| `limit` | *Optional[int]* | :heavy_minus_sign: | Applies a limit to the number of results returned.
Can be used for paginating the results together with `offset`. | 20 | +| `offset` | *Optional[int]* | :heavy_minus_sign: | Skip the first `offset` results when paginating.
Needs to be an integer greater or equal to zero.
To be used in conjunction with `limit`. | 10 | \ No newline at end of file diff --git a/docs/models/listdirectorygrouprolemappingsrequest.md b/docs/models/listdirectorygrouprolemappingsrequest.md new file mode 100644 index 00000000..5e5b65a2 --- /dev/null +++ b/docs/models/listdirectorygrouprolemappingsrequest.md @@ -0,0 +1,8 @@ +# ListDirectoryGroupRoleMappingsRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------ | ------------------------ | ------------------------ | ------------------------ | +| `directory_id` | *str* | :heavy_check_mark: | The ID of the directory. | \ No newline at end of file diff --git a/docs/models/listoauthapplicationsrequest.md b/docs/models/listoauthapplicationsrequest.md index 215fb569..42a768cf 100644 --- a/docs/models/listoauthapplicationsrequest.md +++ b/docs/models/listoauthapplicationsrequest.md @@ -8,4 +8,4 @@ | `limit` | *Optional[int]* | :heavy_minus_sign: | Applies a limit to the number of results returned.
Can be used for paginating the results together with `offset`. | 20 | | `offset` | *Optional[int]* | :heavy_minus_sign: | Skip the first `offset` results when paginating.
Needs to be an integer greater or equal to zero.
To be used in conjunction with `limit`. | 10 | | `order_by` | *Optional[str]* | :heavy_minus_sign: | Allows to return OAuth applications in a particular order.
At the moment, you can order the returned OAuth applications by their `created_at` and `name`.
In order to specify the direction, you can use the `+/-` symbols prepended in the property to order by.
For example, if you want OAuth applications to be returned in descending order according to their `created_at` property, you can use `-created_at`.
If you don't use `+` or `-`, then `+` is implied. We only support one `order_by` parameter, and if multiple `order_by` parameters are provided, we will only keep the first one. For example,
if you pass `order_by=name&order_by=created_at`, we will consider only the first `order_by` parameter, which is `name`. The `created_at` parameter will be ignored in this case. | | -| `name_query` | *Optional[str]* | :heavy_minus_sign: | Returns OAuth applications with names that match the given query, via case-insensitive partial match. | | \ No newline at end of file +| `name_query` | *Optional[str]* | :heavy_minus_sign: | Returns OAuth applications with names that match the given query, via case-insensitive partial match.
Also returns the OAuth application whose `client_id` is exactly the given query, which is useful for
resolving a `client_id` to the OAuth application `id` required by the read, update and delete endpoints. | | \ No newline at end of file diff --git a/docs/models/listscimgrouprolemappingsrequest.md b/docs/models/listscimgrouprolemappingsrequest.md index 4c0e90d3..6fedce7a 100644 --- a/docs/models/listscimgrouprolemappingsrequest.md +++ b/docs/models/listscimgrouprolemappingsrequest.md @@ -3,6 +3,6 @@ ## Fields -| Field | Type | Required | Description | -| ----------------------------- | ----------------------------- | ----------------------------- | ----------------------------- | -| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the SCIM directory. | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------ | ------------------------ | ------------------------ | ------------------------ | +| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the directory. | \ No newline at end of file diff --git a/docs/models/listuserbiometriccredentialsrequest.md b/docs/models/listuserbiometriccredentialsrequest.md new file mode 100644 index 00000000..af68dfa3 --- /dev/null +++ b/docs/models/listuserbiometriccredentialsrequest.md @@ -0,0 +1,8 @@ +# ListUserBiometricCredentialsRequest + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | +| `user_id` | *str* | :heavy_check_mark: | The ID of the user whose biometric credentials are returned | \ No newline at end of file diff --git a/docs/models/oauthapplication.md b/docs/models/oauthapplication.md index 1cbd0cab..4e4d7087 100644 --- a/docs/models/oauthapplication.md +++ b/docs/models/oauthapplication.md @@ -15,8 +15,9 @@ | `dynamically_registered` | *bool* | :heavy_check_mark: | N/A | | | `consent_screen_enabled` | *bool* | :heavy_check_mark: | N/A | | | `pkce_required` | *bool* | :heavy_check_mark: | N/A | | +| `device_authorization_grant_enabled` | *bool* | :heavy_check_mark: | N/A | | | `public` | *bool* | :heavy_check_mark: | N/A | false | -| `scopes` | *str* | :heavy_check_mark: | N/A | profile email | +| `scopes` | *str* | :heavy_check_mark: | The complete scope ceiling for the OAuth application, as a space-delimited list of built-in and assigned custom scope keys.
| profile email | | `redirect_uris` | List[*str*] | :heavy_check_mark: | N/A | | | ~~`callback_url`~~ | *str* | :heavy_check_mark: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

Deprecated: Use redirect_uris instead.
| https://example.com/oauth/callback | | `authorize_url` | *str* | :heavy_check_mark: | N/A | https://example.com/authorize | diff --git a/docs/models/oauthapplicationsettings.md b/docs/models/oauthapplicationsettings.md index 50ba3613..16320752 100644 --- a/docs/models/oauthapplicationsettings.md +++ b/docs/models/oauthapplicationsettings.md @@ -5,12 +5,14 @@ Success ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `object` | [models.OAuthApplicationSettingsObject](../models/oauthapplicationsettingsobject.md) | :heavy_check_mark: | String representing the object's type. Objects of the same type share the same value. | -| `dynamic_oauth_client_registration` | *bool* | :heavy_check_mark: | Whether dynamic OAuth client registration is enabled for the instance (RFC 7591). | -| `default_scopes` | List[*str*] | :heavy_check_mark: | Default scopes. | -| `oauth_jwt_access_tokens` | *bool* | :heavy_check_mark: | Whether OAuth JWT access tokens are enabled for the instance (disabled indicates opaque access tokens). | -| `client_id_metadata_documents_advertised` | *bool* | :heavy_check_mark: | Whether the instance advertises support for Client ID Metadata Documents in its OAuth authorization server metadata. | -| `client_id_metadata_documents_only_allow_pre_registered_clients` | *bool* | :heavy_check_mark: | When true, new unknown CIMD clients are rejected. Previously auto-connected and pre-registered clients remain admitted; deleting a client makes it unknown again. | -| `client_id_metadata_documents_block_implicitly_allowed_clients` | *bool* | :heavy_check_mark: | When true, recorded implicitly allowed CIMD clients are rejected on future client lookups. Explicitly allowed clients remain accepted. This does not revoke previously issued access tokens. | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `object` | [models.OAuthApplicationSettingsObject](../models/oauthapplicationsettingsobject.md) | :heavy_check_mark: | String representing the object's type. Objects of the same type share the same value. | +| `dynamic_oauth_client_registration` | *bool* | :heavy_check_mark: | Whether dynamic OAuth client registration is enabled for the instance (RFC 7591). | +| `default_scopes` | List[*str*] | :heavy_check_mark: | Default scopes assigned when a dynamically registered or first-contact CIMD client omits `scope`. Contains built-in keys and custom catalog keys. Null means Clerk-provided defaults. `advertised` does not affect eligibility. An empty input array is stored and returned as null.
| +| `oauth_jwt_access_tokens` | *bool* | :heavy_check_mark: | Whether OAuth JWT access tokens are enabled for the instance (disabled indicates opaque access tokens). | +| `aud_claim_enabled` | *bool* | :heavy_check_mark: | Whether OAuth access tokens can include an aud claim derived from the RFC 8707 resource parameter. | +| `pkce_required` | *bool* | :heavy_check_mark: | Whether all new OAuth authorization-code requests must use PKCE with the S256 challenge method. | +| `client_id_metadata_documents_advertised` | *bool* | :heavy_check_mark: | Whether the instance advertises support for Client ID Metadata Documents in its OAuth authorization server metadata. | +| `client_id_metadata_documents_only_allow_pre_registered_clients` | *bool* | :heavy_check_mark: | When true, new unknown CIMD clients are rejected. Previously auto-connected and pre-registered clients remain admitted; deleting a client makes it unknown again. | +| `client_id_metadata_documents_block_implicitly_allowed_clients` | *bool* | :heavy_check_mark: | When true, recorded implicitly allowed CIMD clients are rejected on future client lookups. Explicitly allowed clients remain accepted. This does not revoke previously issued access tokens. | \ No newline at end of file diff --git a/docs/models/oauthapplicationwithsecret.md b/docs/models/oauthapplicationwithsecret.md index 32232009..27db003b 100644 --- a/docs/models/oauthapplicationwithsecret.md +++ b/docs/models/oauthapplicationwithsecret.md @@ -15,8 +15,9 @@ | `dynamically_registered` | *bool* | :heavy_check_mark: | N/A | | | `consent_screen_enabled` | *bool* | :heavy_check_mark: | N/A | | | `pkce_required` | *bool* | :heavy_check_mark: | N/A | | +| `device_authorization_grant_enabled` | *bool* | :heavy_check_mark: | N/A | | | `public` | *bool* | :heavy_check_mark: | N/A | false | -| `scopes` | *str* | :heavy_check_mark: | N/A | profile email | +| `scopes` | *str* | :heavy_check_mark: | The complete scope ceiling for the OAuth application, as a space-delimited list of built-in and assigned custom scope keys.
| profile email | | `redirect_uris` | List[*str*] | :heavy_check_mark: | N/A | | | ~~`callback_url`~~ | *str* | :heavy_check_mark: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

Deprecated: Use redirect_uris instead.
| https://example.com/oauth/callback | | `authorize_url` | *str* | :heavy_check_mark: | N/A | https://example.com/authorize | diff --git a/docs/models/organization.md b/docs/models/organization.md index fcd3db93..1cb53c5c 100644 --- a/docs/models/organization.md +++ b/docs/models/organization.md @@ -16,6 +16,7 @@ | `pending_invitations_count` | *Optional[int]* | :heavy_minus_sign: | N/A | | | `max_allowed_memberships` | *int* | :heavy_check_mark: | N/A | 300 | | `admin_delete_enabled` | *bool* | :heavy_check_mark: | N/A | true | +| `self_serve_sso_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether this organization can configure self-serve enterprise SSO.
| | | `public_metadata` | Dict[str, *Any*] | :heavy_check_mark: | N/A | {
"public_info": "Info visible to everyone"
} | | `private_metadata` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | {
"internal_use_only": "Sensitive data"
} | | `created_by` | *Optional[str]* | :heavy_minus_sign: | N/A | user_123456 | diff --git a/docs/models/organizationmembershiporganization.md b/docs/models/organizationmembershiporganization.md index 3b8b8c5e..08cbcd66 100644 --- a/docs/models/organizationmembershiporganization.md +++ b/docs/models/organizationmembershiporganization.md @@ -16,6 +16,7 @@ | `pending_invitations_count` | *Optional[int]* | :heavy_minus_sign: | N/A | | | `max_allowed_memberships` | *int* | :heavy_check_mark: | N/A | 300 | | `admin_delete_enabled` | *bool* | :heavy_check_mark: | N/A | true | +| `self_serve_sso_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether this organization can configure self-serve enterprise SSO.
| | | `public_metadata` | Dict[str, *Any*] | :heavy_check_mark: | N/A | {
"public_info": "Info visible to everyone"
} | | `private_metadata` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | {
"internal_use_only": "Sensitive data"
} | | `created_by` | *Optional[str]* | :heavy_minus_sign: | N/A | user_123456 | diff --git a/docs/models/organizationwithlogo.md b/docs/models/organizationwithlogo.md index c84c2a66..81a0d798 100644 --- a/docs/models/organizationwithlogo.md +++ b/docs/models/organizationwithlogo.md @@ -16,6 +16,7 @@ | `pending_invitations_count` | *Optional[int]* | :heavy_minus_sign: | N/A | | | `max_allowed_memberships` | *int* | :heavy_check_mark: | N/A | 300 | | `admin_delete_enabled` | *bool* | :heavy_check_mark: | N/A | true | +| `self_serve_sso_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether this organization can configure self-serve enterprise SSO.
| | | `public_metadata` | Dict[str, *Any*] | :heavy_check_mark: | N/A | {
"public_info": "Info visible to everyone"
} | | `private_metadata` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | {
"internal_use_only": "Sensitive data"
} | | `created_by` | *Optional[str]* | :heavy_minus_sign: | N/A | user_123456 | diff --git a/docs/models/recordtype.md b/docs/models/recordtype.md new file mode 100644 index 00000000..fea5b989 --- /dev/null +++ b/docs/models/recordtype.md @@ -0,0 +1,17 @@ +# RecordType + +## Example Usage + +```python +from clerk_backend_api.models import RecordType + +value = RecordType.CNAME +``` + + +## Values + +| Name | Value | +| ------- | ------- | +| `CNAME` | CNAME | +| `TXT` | TXT | \ No newline at end of file diff --git a/docs/models/removebillingsubscriptionitemdiscountrequest.md b/docs/models/removebillingsubscriptionitemdiscountrequest.md new file mode 100644 index 00000000..da803967 --- /dev/null +++ b/docs/models/removebillingsubscriptionitemdiscountrequest.md @@ -0,0 +1,9 @@ +# RemoveBillingSubscriptionItemDiscountRequest + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | +| `subscription_item_id` | *str* | :heavy_check_mark: | The ID of the subscription item to remove the discount from | +| `discount_id` | *str* | :heavy_check_mark: | The ID of the discount to remove | \ No newline at end of file diff --git a/docs/models/replacedirectorygrouprolemappingsmappings.md b/docs/models/replacedirectorygrouprolemappingsmappings.md new file mode 100644 index 00000000..a5fa6381 --- /dev/null +++ b/docs/models/replacedirectorygrouprolemappingsmappings.md @@ -0,0 +1,10 @@ +# ReplaceDirectoryGroupRoleMappingsMappings + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | +| `directory_group_id` | *Optional[str]* | :heavy_minus_sign: | The group ID from the identity provider. Exactly one of `directory_group_id` or `scim_group_id` is required. | +| `scim_group_id` | *Optional[str]* | :heavy_minus_sign: | The legacy name for `directory_group_id`. Send either one, or both with the same value; sending both with different values is rejected. | +| `role_id` | *str* | :heavy_check_mark: | The ID of the organization role to assign to members of the group. | \ No newline at end of file diff --git a/docs/models/replacedirectorygrouprolemappingsrequest.md b/docs/models/replacedirectorygrouprolemappingsrequest.md new file mode 100644 index 00000000..1891cafa --- /dev/null +++ b/docs/models/replacedirectorygrouprolemappingsrequest.md @@ -0,0 +1,9 @@ +# ReplaceDirectoryGroupRoleMappingsRequest + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | +| `directory_id` | *str* | :heavy_check_mark: | The ID of the directory. | +| `request_body` | [models.ReplaceDirectoryGroupRoleMappingsRequestBody](../models/replacedirectorygrouprolemappingsrequestbody.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/replacedirectorygrouprolemappingsrequestbody.md b/docs/models/replacedirectorygrouprolemappingsrequestbody.md new file mode 100644 index 00000000..426b7474 --- /dev/null +++ b/docs/models/replacedirectorygrouprolemappingsrequestbody.md @@ -0,0 +1,8 @@ +# ReplaceDirectoryGroupRoleMappingsRequestBody + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | +| `mappings` | List[[models.ReplaceDirectoryGroupRoleMappingsMappings](../models/replacedirectorygrouprolemappingsmappings.md)] | :heavy_check_mark: | The desired set of mappings. Array order sets precedence (1-indexed). An empty array clears all mappings. | \ No newline at end of file diff --git a/docs/models/replacescimgrouprolemappingsrequest.md b/docs/models/replacescimgrouprolemappingsrequest.md index 6e2b8ef3..bbab2219 100644 --- a/docs/models/replacescimgrouprolemappingsrequest.md +++ b/docs/models/replacescimgrouprolemappingsrequest.md @@ -5,5 +5,5 @@ | Field | Type | Required | Description | | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | -| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the SCIM directory. | +| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the directory. | | `request_body` | [models.ReplaceSCIMGroupRoleMappingsRequestBody](../models/replacescimgrouprolemappingsrequestbody.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/revokeuserbiometriccredentialrequest.md b/docs/models/revokeuserbiometriccredentialrequest.md new file mode 100644 index 00000000..be671608 --- /dev/null +++ b/docs/models/revokeuserbiometriccredentialrequest.md @@ -0,0 +1,9 @@ +# RevokeUserBiometricCredentialRequest + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | +| `user_id` | *str* | :heavy_check_mark: | The ID of the user that owns the biometric credential | +| `biometric_credential_id` | *str* | :heavy_check_mark: | The ID of the biometric credential to revoke | \ No newline at end of file diff --git a/docs/models/rotatedirectoryapikeyrequest.md b/docs/models/rotatedirectoryapikeyrequest.md new file mode 100644 index 00000000..aa77493d --- /dev/null +++ b/docs/models/rotatedirectoryapikeyrequest.md @@ -0,0 +1,8 @@ +# RotateDirectoryAPIKeyRequest + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------- | ----------------------------------------------- | ----------------------------------------------- | ----------------------------------------------- | +| `directory_id` | *str* | :heavy_check_mark: | The ID of the directory whose API key to rotate | \ No newline at end of file diff --git a/docs/models/rotatescimdirectoryapikeyrequest.md b/docs/models/rotatescimdirectoryapikeyrequest.md index 34a6fa73..d45a74d7 100644 --- a/docs/models/rotatescimdirectoryapikeyrequest.md +++ b/docs/models/rotatescimdirectoryapikeyrequest.md @@ -3,6 +3,6 @@ ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | -| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the SCIM directory whose API key to rotate | \ No newline at end of file +| Field | Type | Required | Description | +| ----------------------------------------------- | ----------------------------------------------- | ----------------------------------------------- | ----------------------------------------------- | +| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the directory whose API key to rotate | \ No newline at end of file diff --git a/docs/models/scim.md b/docs/models/scim.md index 7620dc17..dc0ab643 100644 --- a/docs/models/scim.md +++ b/docs/models/scim.md @@ -1,13 +1,13 @@ # Scim -Metadata describing a user's linkage to a SCIM directory. This object is only delivered on `user.created` and `user.updated` webhook events, and only when the user is provisioned through a SCIM directory. Its absence does not necessarily mean the user is not SCIM-managed. +Metadata describing a user's linkage to a directory. This object is only delivered on `user.created` and `user.updated` webhook events, and only when the user is provisioned through a directory. Its absence does not necessarily mean the user is not managed by a directory. ## Fields -| Field | Type | Required | Description | -| --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | -| `directory_id` | *str* | :heavy_check_mark: | The ID of the SCIM directory the user is provisioned from.
| -| `directory_enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether the SCIM directory is currently enabled. Omitted when false.
| -| `external_id` | *Nullable[str]* | :heavy_check_mark: | The user's external ID as reported by the SCIM directory, if any.
| \ No newline at end of file +| Field | Type | Required | Description | +| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | +| `directory_id` | *str* | :heavy_check_mark: | The ID of the directory the user is provisioned from.
| +| `directory_enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether the directory is currently enabled. Omitted when false.
| +| `external_id` | *Nullable[str]* | :heavy_check_mark: | The user's external ID as reported by the directory, if any.
| \ No newline at end of file diff --git a/docs/models/scimdirectory.md b/docs/models/scimdirectory.md index 7128dd2a..5281f368 100644 --- a/docs/models/scimdirectory.md +++ b/docs/models/scimdirectory.md @@ -1,6 +1,6 @@ # SCIMDirectory -A SCIM directory configuration for provisioning users via SCIM protocol. +A directory configuration for provisioning users via SCIM protocol. ## Fields @@ -8,15 +8,15 @@ A SCIM directory configuration for provisioning users via SCIM protocol. | Field | Type | Required | Description | | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | | `object` | [models.SCIMDirectoryObject](../models/scimdirectoryobject.md) | :heavy_check_mark: | String representing the object's type. Always "scim_directory". | -| `id` | *str* | :heavy_check_mark: | Unique identifier for the SCIM directory. | -| `name` | *str* | :heavy_check_mark: | A human-friendly name for the SCIM directory. | +| `id` | *str* | :heavy_check_mark: | Unique identifier for the directory. | +| `name` | *str* | :heavy_check_mark: | A human-friendly name for the directory. | | `enterprise_connection_id` | *OptionalNullable[str]* | :heavy_minus_sign: | The ID of the associated enterprise connection. | | `endpoint_url` | *str* | :heavy_check_mark: | The SCIM endpoint URL for this directory. | -| `provider` | *str* | :heavy_check_mark: | The identity provider for this SCIM directory. | -| `enabled` | *bool* | :heavy_check_mark: | Whether the SCIM directory is enabled. | -| `group_role_mapping_enabled` | *bool* | :heavy_check_mark: | Whether group-to-role mapping is enabled for this SCIM directory. | +| `provider` | *str* | :heavy_check_mark: | The identity provider for this directory. | +| `enabled` | *bool* | :heavy_check_mark: | Whether the directory is enabled. | +| `group_role_mapping_enabled` | *bool* | :heavy_check_mark: | Whether group-to-role mapping is enabled for this directory. | | `attribute_mapping` | Dict[str, *str*] | :heavy_check_mark: | Mapping of user attributes to the SCIM attribute paths they are extracted from. | | `custom_attributes` | List[[models.SCIMDirectoryCustomAttributes](../models/scimdirectorycustomattributes.md)] | :heavy_minus_sign: | Custom attributes to map from the IdP to the user's profile via SCIM provisioning. Requires the custom attributes feature to be enabled for the instance. | | `api_key` | *OptionalNullable[str]* | :heavy_minus_sign: | The API key for authenticating SCIM requests. Only returned when the directory is created or the key is rotated. | -| `created_at` | *int* | :heavy_check_mark: | Unix timestamp when the SCIM directory was created. | -| `updated_at` | *int* | :heavy_check_mark: | Unix timestamp when the SCIM directory was last updated. | \ No newline at end of file +| `created_at` | *int* | :heavy_check_mark: | Unix timestamp when the directory was created. | +| `updated_at` | *int* | :heavy_check_mark: | Unix timestamp when the directory was last updated. | \ No newline at end of file diff --git a/docs/models/scimdirectorycustomattributes.md b/docs/models/scimdirectorycustomattributes.md index b88c200d..8e284665 100644 --- a/docs/models/scimdirectorycustomattributes.md +++ b/docs/models/scimdirectorycustomattributes.md @@ -9,4 +9,5 @@ | `key` | *Optional[str]* | :heavy_minus_sign: | Key used to store the attribute in the user's public/private/unsafe metadata | | `sso_path` | *Optional[str]* | :heavy_minus_sign: | Path to extract the attribute value from SSO claims (SAML assertions or OIDC claims) | | `scim_path` | *Optional[str]* | :heavy_minus_sign: | GJSON path to extract the attribute value from SCIM user resources | +| `directory_path` | *Optional[str]* | :heavy_minus_sign: | GJSON path to extract the attribute value from directory sync user resources. Same value as `scim_path`. | | `multi_valued` | *Optional[bool]* | :heavy_minus_sign: | When true, the attribute supports multiple values; values from the IdP are written to public_metadata as an array. Defaults to false. | \ No newline at end of file diff --git a/docs/models/scimdirectorylist.md b/docs/models/scimdirectorylist.md index fbcd6d88..a215def1 100644 --- a/docs/models/scimdirectorylist.md +++ b/docs/models/scimdirectorylist.md @@ -1,6 +1,6 @@ # SCIMDirectoryList -A list of SCIM directories +A list of directories ## Fields @@ -8,4 +8,4 @@ A list of SCIM directories | Field | Type | Required | Description | | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | | `data` | List[[models.SCIMDirectory](../models/scimdirectory.md)] | :heavy_check_mark: | N/A | -| `total_count` | *int* | :heavy_check_mark: | Total number of SCIM directories. | \ No newline at end of file +| `total_count` | *int* | :heavy_check_mark: | Total number of directories. | \ No newline at end of file diff --git a/docs/models/scimgrouprolemapping.md b/docs/models/scimgrouprolemapping.md index a3456798..19bb10c3 100644 --- a/docs/models/scimgrouprolemapping.md +++ b/docs/models/scimgrouprolemapping.md @@ -5,14 +5,17 @@ A mapping from a SCIM group to an organization role. Members of the group are as ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | -| `object` | [models.SCIMGroupRoleMappingObject](../models/scimgrouprolemappingobject.md) | :heavy_check_mark: | String representing the object's type. Always "scim_group_role_mapping". | -| `id` | *str* | :heavy_check_mark: | Unique identifier for the SCIM group role mapping. | -| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the SCIM directory this mapping belongs to. | -| `scim_group_id` | *str* | :heavy_check_mark: | The SCIM group ID from the identity provider. | -| `scim_group_display_name` | *str* | :heavy_check_mark: | The display name of the SCIM group, as reported by the identity provider. | -| `role` | [Optional[models.Role]](../models/role.md) | :heavy_minus_sign: | N/A | -| `precedence` | *int* | :heavy_check_mark: | Mapping precedence, starting at 1. Lower values take priority when a user belongs to multiple mapped groups. | -| `created_at` | *int* | :heavy_check_mark: | Unix timestamp (milliseconds) of when the mapping was created. | -| `updated_at` | *int* | :heavy_check_mark: | Unix timestamp (milliseconds) of when the mapping was last updated. | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | +| `object` | [models.SCIMGroupRoleMappingObject](../models/scimgrouprolemappingobject.md) | :heavy_check_mark: | String representing the object's type. Always "scim_group_role_mapping". | +| `id` | *str* | :heavy_check_mark: | Unique identifier for the SCIM group role mapping. | +| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the directory this mapping belongs to. | +| `directory_id` | *str* | :heavy_check_mark: | The ID of the directory this mapping belongs to. Same value as `scim_directory_id`. | +| `scim_group_id` | *str* | :heavy_check_mark: | The SCIM group ID from the identity provider. | +| `directory_group_id` | *str* | :heavy_check_mark: | The group ID from the identity provider. Same value as `scim_group_id`. | +| `scim_group_display_name` | *str* | :heavy_check_mark: | The display name of the SCIM group, as reported by the identity provider. | +| `directory_group_display_name` | *str* | :heavy_check_mark: | The display name of the group, as reported by the identity provider. Same value as `scim_group_display_name`. | +| `role` | [Optional[models.Role]](../models/role.md) | :heavy_minus_sign: | N/A | +| `precedence` | *int* | :heavy_check_mark: | Mapping precedence, starting at 1. Lower values take priority when a user belongs to multiple mapped groups. | +| `created_at` | *int* | :heavy_check_mark: | Unix timestamp (milliseconds) of when the mapping was created. | +| `updated_at` | *int* | :heavy_check_mark: | Unix timestamp (milliseconds) of when the mapping was last updated. | \ No newline at end of file diff --git a/docs/models/source.md b/docs/models/source.md new file mode 100644 index 00000000..a4da44bc --- /dev/null +++ b/docs/models/source.md @@ -0,0 +1,20 @@ +# Source + +How the discount was applied to the subscription item. + +## Example Usage + +```python +from clerk_backend_api.models import Source + +value = Source.PROMOTION +``` + + +## Values + +| Name | Value | +| ------------ | ------------ | +| `PROMOTION` | promotion | +| `MANUAL` | manual | +| `PROMO_CODE` | promo_code | \ No newline at end of file diff --git a/docs/models/updatedirectoryrequest.md b/docs/models/updatedirectoryrequest.md new file mode 100644 index 00000000..285e5459 --- /dev/null +++ b/docs/models/updatedirectoryrequest.md @@ -0,0 +1,9 @@ +# UpdateDirectoryRequest + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| `directory_id` | *str* | :heavy_check_mark: | The ID of the directory to update | +| `request_body` | [Optional[models.UpdateDirectoryRequestBody]](../models/updatedirectoryrequestbody.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/updatedirectoryrequestbody.md b/docs/models/updatedirectoryrequestbody.md new file mode 100644 index 00000000..8c2a58e2 --- /dev/null +++ b/docs/models/updatedirectoryrequestbody.md @@ -0,0 +1,12 @@ +# UpdateDirectoryRequestBody + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | +| `name` | *Optional[str]* | :heavy_minus_sign: | A human-friendly name for the directory. | +| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether the directory is enabled. | +| `provider` | *Optional[str]* | :heavy_minus_sign: | The identity provider for this directory. | +| `attribute_mapping` | Dict[str, *Nullable[str]*] | :heavy_minus_sign: | Attribute-to-directory-path entries to merge into the directory's attribute mapping.
Set a key to `null` to remove it from the mapping. | +| `group_role_mapping_enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether group-to-role mapping is enabled for this directory. | \ No newline at end of file diff --git a/docs/models/updateenterpriseconnectioncustomattributes.md b/docs/models/updateenterpriseconnectioncustomattributes.md index 0a3d68ef..0e853690 100644 --- a/docs/models/updateenterpriseconnectioncustomattributes.md +++ b/docs/models/updateenterpriseconnectioncustomattributes.md @@ -9,4 +9,5 @@ | `key` | *str* | :heavy_check_mark: | Key used to store the attribute in the user's metadata | | `sso_path` | *Optional[str]* | :heavy_minus_sign: | Path to extract the attribute value from SSO claims | | `scim_path` | *Optional[str]* | :heavy_minus_sign: | GJSON path to extract the attribute value from SCIM user resources | +| `directory_path` | *Optional[str]* | :heavy_minus_sign: | The new name for `scim_path`. Send either one, or both with the same value; sending both with different values is rejected. | | `multi_valued` | *Optional[bool]* | :heavy_minus_sign: | When true, the attribute supports multiple values; values from the IdP are written to public_metadata as an array. Defaults to false. | \ No newline at end of file diff --git a/docs/models/updateinstanceoauthapplicationsettingsrequestbody.md b/docs/models/updateinstanceoauthapplicationsettingsrequestbody.md index d8bf4abe..d707cfc3 100644 --- a/docs/models/updateinstanceoauthapplicationsettingsrequestbody.md +++ b/docs/models/updateinstanceoauthapplicationsettingsrequestbody.md @@ -3,11 +3,13 @@ ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `dynamic_oauth_client_registration` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether dynamic OAuth client registration is enabled for the instance (RFC 7591). | -| `default_scopes` | List[*str*] | :heavy_minus_sign: | Default scopes. Set to null to reset to Clerk-provided defaults. | -| `oauth_jwt_access_tokens` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether OAuth JWT access tokens are enabled for the instance (disabled indicates opaque access tokens). | -| `client_id_metadata_documents_advertised` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether the instance advertises support for Client ID Metadata Documents in its OAuth authorization server metadata. | -| `client_id_metadata_documents_only_allow_pre_registered_clients` | *OptionalNullable[bool]* | :heavy_minus_sign: | When true, new unknown CIMD clients are rejected. Previously auto-connected and pre-registered clients remain admitted; deleting a client makes it unknown again. | -| `client_id_metadata_documents_block_implicitly_allowed_clients` | *OptionalNullable[bool]* | :heavy_minus_sign: | When true, recorded implicitly allowed CIMD clients are rejected on future client lookups. Explicitly allowed clients remain accepted. This does not revoke previously issued access tokens. | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `dynamic_oauth_client_registration` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether dynamic OAuth client registration is enabled for the instance (RFC 7591). | +| `default_scopes` | List[*str*] | :heavy_minus_sign: | Default scopes assigned when a dynamically registered or first-contact CIMD client omits `scope`. Accepts built-in keys and current custom catalog keys. `advertised` does not affect eligibility. Duplicate keys, unknown keys, and `offline_access` are rejected. An empty array or null resets to Clerk-provided defaults.
| +| `oauth_jwt_access_tokens` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether OAuth JWT access tokens are enabled for the instance (disabled indicates opaque access tokens). | +| `aud_claim_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether OAuth access tokens can include an aud claim derived from the RFC 8707 resource parameter. | +| `pkce_required` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether all new OAuth authorization-code requests must use PKCE with the S256 challenge method. | +| `client_id_metadata_documents_advertised` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether the instance advertises support for Client ID Metadata Documents in its OAuth authorization server metadata. | +| `client_id_metadata_documents_only_allow_pre_registered_clients` | *OptionalNullable[bool]* | :heavy_minus_sign: | When true, new unknown CIMD clients are rejected. Previously auto-connected and pre-registered clients remain admitted; deleting a client makes it unknown again. | +| `client_id_metadata_documents_block_implicitly_allowed_clients` | *OptionalNullable[bool]* | :heavy_minus_sign: | When true, recorded implicitly allowed CIMD clients are rejected on future client lookups. Explicitly allowed clients remain accepted. This does not revoke previously issued access tokens. | \ No newline at end of file diff --git a/docs/models/updateinstanceprotectrequestbody.md b/docs/models/updateinstanceprotectrequestbody.md index 0fefea3e..73e4ae47 100644 --- a/docs/models/updateinstanceprotectrequestbody.md +++ b/docs/models/updateinstanceprotectrequestbody.md @@ -3,7 +3,7 @@ ## Fields -| Field | Type | Required | Description | -| ------------------------ | ------------------------ | ------------------------ | ------------------------ | -| `rules_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | -| `specter_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `rules_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | Set true to enforce Protect rules on this instance. Set false to stop enforcing and return the instance to its default posture, where traffic is still evaluated in shadow but nothing is blocked. This does not remove the instance from Protect. | +| `specter_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/updateinstancerequestbody.md b/docs/models/updateinstancerequestbody.md index 249b5b99..66d6ea6f 100644 --- a/docs/models/updateinstancerequestbody.md +++ b/docs/models/updateinstancerequestbody.md @@ -3,14 +3,16 @@ ## Fields -| Field | Type | Required | Description | Example | -| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `test_mode` | *OptionalNullable[bool]* | :heavy_minus_sign: | Toggles test mode for this instance, allowing the use of test email addresses and phone numbers.
Defaults to true for development instances. | true | -| `hibp` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether the instance should be using the HIBP service to check passwords for breaches | false | -| `support_email` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | support@example.com | -| `clerk_js_version` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | 2.3.1 | -| `development_origin` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | http://localhost:3000 | -| `allowed_origins` | List[*str*] | :heavy_minus_sign: | For browser-like stacks such as browser extensions, Electron (not officially supported), or Capacitor.js (not officially supported), the instance allowed origins need to be updated with the request origin value. For Chrome extensions popup, background, or service worker pages, the origin is chrome-extension://extension_uuid. For Electron apps the default origin is http://localhost:3000. For Capacitor, the origin is capacitor://localhost. | [
"http://localhost:3000",
"chrome-extension://extension_uiid",
"capacitor://localhost"
] | -| ~~`cookieless_dev`~~ | *OptionalNullable[bool]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

Whether the instance should operate in cookieless development mode (i.e. without third-party cookies).
Deprecated: Please use `url_based_session_syncing` instead. | false | -| `url_based_session_syncing` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether the instance should use URL-based session syncing in development mode (i.e. without third-party cookies). | true | -| `preferred_sign_in_strategy_when_password_required` | [OptionalNullable[models.PreferredSignInStrategyWhenPasswordRequired]](../models/preferredsigninstrategywhenpasswordrequired.md) | :heavy_minus_sign: | When password is required at the instance level, sets the preferred sign-in strategy surfaced to Clerk components. Has no effect when password is not required. Defaults to `password`. Set to an empty string to clear the override. | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `test_mode` | *OptionalNullable[bool]* | :heavy_minus_sign: | Toggles test mode for this instance, allowing the use of test email addresses and phone numbers.
Defaults to true for development instances. | true | +| `hibp` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether the instance should be using the HIBP service to check passwords for breaches | false | +| `support_email` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | support@example.com | +| `clerk_js_version` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | 2.3.1 | +| `development_origin` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | http://localhost:3000 | +| `allowed_origins` | List[*str*] | :heavy_minus_sign: | For browser-like stacks such as browser extensions, Electron (not officially supported), or Capacitor.js (not officially supported), the instance allowed origins need to be updated with the request origin value. For Chrome extensions popup, background, or service worker pages, the origin is chrome-extension://extension_uuid. For Electron apps the default origin is http://localhost:3000. For Capacitor, the origin is capacitor://localhost.
Send an empty array to remove all allowed origins. A null value leaves the current list unchanged. | [
"http://localhost:3000",
"chrome-extension://extension_uiid",
"capacitor://localhost"
] | +| `allowed_subdomains` | List[*str*] | :heavy_minus_sign: | Subdomains of the instance's own domains that may originate requests while `subdomain_allowlist_enabled` is true. Each entry is either an exact host (`app.example.com`) or a wildcard anchored on a host beneath one of the instance's domains (`*.preview.example.com`), which covers every host under that anchor but not the anchor itself.
Entries are stored folded to lower case with any trailing dot removed, the form the origin check compares against, so entries differing only in those respects are one entry. Entries already stored are not validated again, so a list read back from the instance can always be written again unchanged. Send an empty array to remove all entries. A null value leaves the current list unchanged. Production instances only. | | +| `subdomain_allowlist_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether requests from subdomains of the instance's own domains are restricted to `allowed_subdomains`. When false, every subdomain of the instance's domain is accepted. Production instances only. | | +| ~~`cookieless_dev`~~ | *OptionalNullable[bool]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

Whether the instance should operate in cookieless development mode (i.e. without third-party cookies).
Deprecated: Please use `url_based_session_syncing` instead. | false | +| `url_based_session_syncing` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether the instance should use URL-based session syncing in development mode (i.e. without third-party cookies). | true | +| `preferred_sign_in_strategy_when_password_required` | [OptionalNullable[models.PreferredSignInStrategyWhenPasswordRequired]](../models/preferredsigninstrategywhenpasswordrequired.md) | :heavy_minus_sign: | When password is required at the instance level, sets the preferred sign-in strategy surfaced to Clerk components. Has no effect when password is not required. Defaults to `password`. Set to an empty string to clear the override. | | \ No newline at end of file diff --git a/docs/models/updateoauthapplicationrequestbody.md b/docs/models/updateoauthapplicationrequestbody.md index c6fd3917..4c45513e 100644 --- a/docs/models/updateoauthapplicationrequestbody.md +++ b/docs/models/updateoauthapplicationrequestbody.md @@ -3,12 +3,13 @@ ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `name` | *OptionalNullable[str]* | :heavy_minus_sign: | The new name of the OAuth application.
Max length: 256 | Updated OAuth App Name | -| `redirect_uris` | List[*str*] | :heavy_minus_sign: | An array of redirect URIs of the new OAuth application | | -| ~~`callback_url`~~ | *OptionalNullable[str]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

The new callback URL of the OAuth application | https://example.com/oauth/callback | -| `scopes` | *OptionalNullable[str]* | :heavy_minus_sign: | Define the allowed scopes for the new OAuth applications that dictate the user payload of the OAuth user info endpoint. Available scopes are `profile`, `email`, `public_metadata`, `private_metadata`. Provide the requested scopes as a string, separated by spaces. | profile email public_metadata private_metadata | -| `consent_screen_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | True to enable a consent screen to display in the authentication flow. This cannot be disabled for dynamically registered OAuth Applications. | | -| `pkce_required` | *OptionalNullable[bool]* | :heavy_minus_sign: | True to require the Proof Key of Code Exchange (PKCE) flow. | | -| `public` | *OptionalNullable[bool]* | :heavy_minus_sign: | If true, this client is public and you can use the Proof Key of Code Exchange (PKCE) flow. | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `name` | *OptionalNullable[str]* | :heavy_minus_sign: | The new name of the OAuth application.
Max length: 256 | Updated OAuth App Name | +| `redirect_uris` | List[*str*] | :heavy_minus_sign: | An array of redirect URIs of the new OAuth application | | +| ~~`callback_url`~~ | *OptionalNullable[str]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

The new callback URL of the OAuth application | https://example.com/oauth/callback | +| `scopes` | *OptionalNullable[str]* | :heavy_minus_sign: | Replace the application's complete built-in and custom scope ceiling. Provide scope keys as a space-delimited string. Custom keys must exist in the instance OAuth scope catalog. Required built-in scopes, such as `offline_access`, must be included in the replacement set, otherwise the request is rejected. Omit this field to leave all scope assignments unchanged. | profile email offline_access public_metadata private_metadata | +| `consent_screen_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | True to enable a consent screen to display in the authentication flow. This cannot be disabled for dynamically registered OAuth Applications. | | +| `pkce_required` | *OptionalNullable[bool]* | :heavy_minus_sign: | True to require the Proof Key of Code Exchange (PKCE) flow. | | +| `device_authorization_grant_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | True to enable the OAuth Device Authorization Grant for this application. Enabling requires the OAuth Device Authorization Grant feature to be enabled for the instance. Omit this field to leave the setting unchanged. | | +| `public` | *OptionalNullable[bool]* | :heavy_minus_sign: | If true, this client is public and you can use the Proof Key of Code Exchange (PKCE) flow. | | \ No newline at end of file diff --git a/docs/models/updateorganizationrequestbody.md b/docs/models/updateorganizationrequestbody.md index f4d81c09..24d15507 100644 --- a/docs/models/updateorganizationrequestbody.md +++ b/docs/models/updateorganizationrequestbody.md @@ -3,11 +3,12 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | -| `name` | *OptionalNullable[str]* | :heavy_minus_sign: | The new name of the organization.
May not contain URLs or HTML.
Max length: 256 | New Organization Name | -| `slug` | *OptionalNullable[str]* | :heavy_minus_sign: | The new slug of the organization, which needs to be unique in the instance | new-org-slug | -| `max_allowed_memberships` | *OptionalNullable[int]* | :heavy_minus_sign: | The maximum number of memberships allowed for this organization | 100 | -| `admin_delete_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | If true, an admin can delete this organization with the Frontend API. | true | -| `created_at` | *OptionalNullable[str]* | :heavy_minus_sign: | A custom date/time denoting _when_ the organization was created, specified in RFC3339 format (e.g. `2012-10-20T07:15:20.902Z`). | | -| `role_set_key` | *OptionalNullable[str]* | :heavy_minus_sign: | The key of the [role set](https://clerk.com/docs/guides/organizations/control-access/role-sets) to assign to this organization. | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `name` | *OptionalNullable[str]* | :heavy_minus_sign: | The new name of the organization.
May not contain URLs or HTML.
Max length: 256 | New Organization Name | +| `slug` | *OptionalNullable[str]* | :heavy_minus_sign: | The new slug of the organization, which needs to be unique in the instance | new-org-slug | +| `max_allowed_memberships` | *OptionalNullable[int]* | :heavy_minus_sign: | The maximum number of memberships allowed for this organization | 100 | +| `admin_delete_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | If true, an admin can delete this organization with the Frontend API. | true | +| `self_serve_sso_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether this organization can configure self-serve enterprise SSO.
Requires the instance to have the self-serve SSO entitlement enabled. | | +| `created_at` | *OptionalNullable[str]* | :heavy_minus_sign: | A custom date/time denoting _when_ the organization was created, specified in RFC3339 format (e.g. `2012-10-20T07:15:20.902Z`). | | +| `role_set_key` | *OptionalNullable[str]* | :heavy_minus_sign: | The key of the [role set](https://clerk.com/docs/guides/organizations/control-access/role-sets) to assign to this organization. | | \ No newline at end of file diff --git a/docs/models/updatescimdirectoryrequest.md b/docs/models/updatescimdirectoryrequest.md index 26038ed9..e679456e 100644 --- a/docs/models/updatescimdirectoryrequest.md +++ b/docs/models/updatescimdirectoryrequest.md @@ -5,5 +5,5 @@ | Field | Type | Required | Description | | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | -| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the SCIM directory to update | +| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the directory to update | | `request_body` | [Optional[models.UpdateSCIMDirectoryRequestBody]](../models/updatescimdirectoryrequestbody.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/updatescimdirectoryrequestbody.md b/docs/models/updatescimdirectoryrequestbody.md index 4f8d3dde..f3b3d601 100644 --- a/docs/models/updatescimdirectoryrequestbody.md +++ b/docs/models/updatescimdirectoryrequestbody.md @@ -5,8 +5,8 @@ | Field | Type | Required | Description | | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | -| `name` | *Optional[str]* | :heavy_minus_sign: | A human-friendly name for the SCIM directory. | -| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether the SCIM directory is enabled. | -| `provider` | *Optional[str]* | :heavy_minus_sign: | The identity provider for this SCIM directory. | +| `name` | *Optional[str]* | :heavy_minus_sign: | A human-friendly name for the directory. | +| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether the directory is enabled. | +| `provider` | *Optional[str]* | :heavy_minus_sign: | The identity provider for this directory. | | `attribute_mapping` | Dict[str, *Nullable[str]*] | :heavy_minus_sign: | Attribute-to-SCIM-path entries to merge into the directory's attribute mapping.
Set a key to `null` to remove it from the mapping. | -| `group_role_mapping_enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether group-to-role mapping is enabled for this SCIM directory. | \ No newline at end of file +| `group_role_mapping_enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether group-to-role mapping is enabled for this directory. | \ No newline at end of file diff --git a/docs/models/updateuserrequestbody.md b/docs/models/updateuserrequestbody.md index e2abc509..761df79a 100644 --- a/docs/models/updateuserrequestbody.md +++ b/docs/models/updateuserrequestbody.md @@ -28,4 +28,4 @@ | `skip_legal_checks` | *OptionalNullable[bool]* | :heavy_minus_sign: | When set to `true` all legal checks are skipped. | | | `create_organizations_limit` | *OptionalNullable[int]* | :heavy_minus_sign: | The maximum number of organizations the user can create. 0 means unlimited. | | | `created_at` | *OptionalNullable[str]* | :heavy_minus_sign: | A custom date/time denoting _when_ the user signed up to the application. | 2021-04-05T14:30:00.000Z | -| `bypass_client_trust` | *OptionalNullable[bool]* | :heavy_minus_sign: | When set to `true`, the user will bypass client trust checks during sign-in. | | \ No newline at end of file +| `bypass_client_trust` | *OptionalNullable[bool]* | :heavy_minus_sign: | When set to `true`, the user will bypass Device Trust checks during sign-in. | | \ No newline at end of file diff --git a/docs/models/user.md b/docs/models/user.md index bd955265..4bb37446 100644 --- a/docs/models/user.md +++ b/docs/models/user.md @@ -51,5 +51,5 @@ Success | `create_organizations_limit` | *OptionalNullable[int]* | :heavy_minus_sign: | The maximum number of organizations the user can create. 0 means unlimited.
| | | `last_active_at` | *Nullable[int]* | :heavy_check_mark: | Unix timestamp of the latest session activity, with day precision.
| 1700690400000 | | `legal_accepted_at` | *Nullable[int]* | :heavy_check_mark: | Unix timestamp of when the user accepted the legal requirements.
| 1700690400000 | -| `bypass_client_trust` | *Optional[bool]* | :heavy_minus_sign: | When set to `true`, the user will bypass client trust checks during sign-in. | | +| `bypass_client_trust` | *Optional[bool]* | :heavy_minus_sign: | When set to `true`, the user will bypass Device Trust checks during sign-in. | | | `scim` | [OptionalNullable[models.Scim]](../models/scim.md) | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/sdks/actortokens/README.md b/docs/sdks/actortokens/README.md index d048d739..8f677311 100644 --- a/docs/sdks/actortokens/README.md +++ b/docs/sdks/actortokens/README.md @@ -51,7 +51,7 @@ with Clerk( | Error Type | Status Code | Content Type | | ------------------ | ------------------ | ------------------ | -| models.ClerkErrors | 400, 402, 422 | application/json | +| models.ClerkErrors | 400, 402, 403, 422 | application/json | | models.SDKError | 4XX, 5XX | \*/\* | ## revoke diff --git a/docs/sdks/billing/README.md b/docs/sdks/billing/README.md index 1f48b292..15118fe2 100644 --- a/docs/sdks/billing/README.md +++ b/docs/sdks/billing/README.md @@ -11,6 +11,8 @@ * [cancel_subscription_item](#cancel_subscription_item) - Cancel a subscription item * [extend_subscription_item_free_trial](#extend_subscription_item_free_trial) - Extend free trial for a subscription item * [create_price_transition](#create_price_transition) - Create a price transition for a subscription item +* [apply_subscription_item_discount](#apply_subscription_item_discount) - Apply a discount to a subscription item +* [remove_subscription_item_discount](#remove_subscription_item_discount) - Remove a discount from a subscription item * [list_statements](#list_statements) - List all billing statements * [get_statement](#get_statement) - Retrieve a billing statement * [get_statement_payment_attempts](#get_statement_payment_attempts) - List payment attempts for a billing statement @@ -132,15 +134,15 @@ with Clerk( ### Parameters -| Parameter | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | -| `plan_id` | *str* | :heavy_check_mark: | The ID of the plan this price belongs to. | -| `amount` | *Nullable[int]* | :heavy_check_mark: | The monthly amount in cents. Must be at least $1 (100 cents) if not null. | -| `currency` | *Optional[str]* | :heavy_minus_sign: | The currency code (e.g., "USD"). Defaults to USD. | -| `annual_monthly_amount` | *OptionalNullable[int]* | :heavy_minus_sign: | The monthly amount in cents when billed annually. Must be at least $1 (100 cents) if not null. | -| `description` | *Optional[str]* | :heavy_minus_sign: | An optional description for this custom price. | -| `supported_billing_periods` | [Optional[models.CreateBillingPriceRequestSupportedBillingPeriods]](../../models/createbillingpricerequestsupportedbillingperiods.md) | :heavy_minus_sign: | Which billing periods this price supports. Inferred from amounts if omitted. | -| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| `plan_id` | *str* | :heavy_check_mark: | The ID of the plan this price belongs to. | +| `amount` | *Nullable[int]* | :heavy_check_mark: | The monthly amount in cents. Use `0` for a complimentary price. Positive amounts must be at least $1 (100 cents). | +| `currency` | *Optional[str]* | :heavy_minus_sign: | The currency code (e.g., "USD"). Defaults to USD. | +| `annual_monthly_amount` | *OptionalNullable[int]* | :heavy_minus_sign: | The monthly amount in cents when billed annually. Use `0` for a complimentary price. Positive amounts must be at least $1 (100 cents). | +| `description` | *Optional[str]* | :heavy_minus_sign: | An optional description for this custom price. | +| `supported_billing_periods` | [Optional[models.CreateBillingPriceRequestSupportedBillingPeriods]](../../models/createbillingpricerequestsupportedbillingperiods.md) | :heavy_minus_sign: | Which billing periods this price supports. Inferred from amounts if omitted. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | ### Response @@ -336,6 +338,94 @@ with Clerk( | models.ClerkErrors | 500 | application/json | | models.SDKError | 4XX, 5XX | \*/\* | +## apply_subscription_item_discount + +Applies an existing discount to a subscription item. +Manual application is an override path: self-serve distribution rules are not enforced. +At most one active discount is allowed per subscription item; applying a different +discount replaces the currently active one. Re-applying the same active discount returns a conflict. + +### Example Usage + + +```python +from clerk_backend_api import Clerk + + +with Clerk( + bearer_auth="", +) as clerk: + + res = clerk.billing.apply_subscription_item_discount(subscription_item_id="", discount_id="") + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `subscription_item_id` | *str* | :heavy_check_mark: | The ID of the subscription item to apply the discount to | +| `discount_id` | *str* | :heavy_check_mark: | The ID of the discount to apply to the subscription item. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.CommerceDiscountRedemptionResponse](../../models/commercediscountredemptionresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| ---------------------------- | ---------------------------- | ---------------------------- | +| models.ClerkErrors | 400, 401, 403, 404, 409, 422 | application/json | +| models.ClerkErrors | 500 | application/json | +| models.SDKError | 4XX, 5XX | \*/\* | + +## remove_subscription_item_discount + +Removes the active discount from a subscription item. +The discount_id must match the subscription item's currently active discount. + +### Example Usage + + +```python +from clerk_backend_api import Clerk + + +with Clerk( + bearer_auth="", +) as clerk: + + res = clerk.billing.remove_subscription_item_discount(subscription_item_id="", discount_id="") + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `subscription_item_id` | *str* | :heavy_check_mark: | The ID of the subscription item to remove the discount from | +| `discount_id` | *str* | :heavy_check_mark: | The ID of the discount to remove | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.CommerceDiscountRedemptionResponse](../../models/commercediscountredemptionresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| ---------------------------- | ---------------------------- | ---------------------------- | +| models.ClerkErrors | 400, 401, 403, 404, 409, 422 | application/json | +| models.ClerkErrors | 500 | application/json | +| models.SDKError | 4XX, 5XX | \*/\* | + ## list_statements Returns a list of all billing statements for the instance. The statements are returned sorted by creation date, diff --git a/docs/sdks/directories/README.md b/docs/sdks/directories/README.md new file mode 100644 index 00000000..9189d616 --- /dev/null +++ b/docs/sdks/directories/README.md @@ -0,0 +1,462 @@ +# Directories + +## Overview + +### Available Operations + +* [list](#list) - List all directories +* [create](#create) - Create a directory +* [get](#get) - Retrieve a directory +* [update](#update) - Update a directory +* [delete](#delete) - Delete a directory +* [rotate_api_key](#rotate_api_key) - Rotate a directory's API key +* [list_group_role_mappings](#list_group_role_mappings) - List directory group role mappings +* [create_group_role_mapping](#create_group_role_mapping) - Create a directory group role mapping +* [replace_group_role_mappings](#replace_group_role_mappings) - Replace directory group role mappings +* [delete_group_role_mapping](#delete_group_role_mapping) - Delete a directory group role mapping + +## list + +Returns a list of all directories for the instance. + +### Example Usage + + +```python +from clerk_backend_api import Clerk + + +with Clerk( + bearer_auth="", +) as clerk: + + res = clerk.directories.list(limit=20, offset=10) + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| `limit` | *Optional[int]* | :heavy_minus_sign: | Applies a limit to the number of results returned.
Can be used for paginating the results together with `offset`. | 20 | +| `offset` | *Optional[int]* | :heavy_minus_sign: | Skip the first `offset` results when paginating.
Needs to be an integer greater or equal to zero.
To be used in conjunction with `limit`. | 10 | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | | + +### Response + +**[models.DirectoryList](../../models/directorylist.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------ | ------------------ | ------------------ | +| models.ClerkErrors | 401, 403 | application/json | +| models.SDKError | 4XX, 5XX | \*/\* | + +## create + +Create a new directory for the instance. + +### Example Usage + + +```python +from clerk_backend_api import Clerk + + +with Clerk( + bearer_auth="", +) as clerk: + + res = clerk.directories.create(request={ + "enterprise_connection_id": "", + "name": "", + "provider": "", + "group_role_mappings": [ + { + "directory_group_id": "", + "scim_group_id": "", + "directory_group_display_name": "", + "scim_group_display_name": "", + "role_id": "", + "precedence": 68591, + }, + ], + }) + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | +| `request` | [models.CreateDirectoryRequestBody](../../models/createdirectoryrequestbody.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.Directory](../../models/directory.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------ | ------------------ | ------------------ | +| models.ClerkErrors | 400, 401, 403, 422 | application/json | +| models.SDKError | 4XX, 5XX | \*/\* | + +## get + +Returns the details of a directory. + +### Example Usage + + +```python +from clerk_backend_api import Clerk + + +with Clerk( + bearer_auth="", +) as clerk: + + res = clerk.directories.get(directory_id="") + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `directory_id` | *str* | :heavy_check_mark: | The ID of the directory to retrieve | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.Directory](../../models/directory.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------ | ------------------ | ------------------ | +| models.ClerkErrors | 401, 403, 404 | application/json | +| models.SDKError | 4XX, 5XX | \*/\* | + +## update + +Updates a directory. + +### Example Usage + + +```python +from clerk_backend_api import Clerk + + +with Clerk( + bearer_auth="", +) as clerk: + + res = clerk.directories.update(directory_id="", name="", enabled=True, provider="", attribute_mapping={ + "key": "", + }, group_role_mapping_enabled=True) + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | +| `directory_id` | *str* | :heavy_check_mark: | The ID of the directory to update | +| `name` | *Optional[str]* | :heavy_minus_sign: | A human-friendly name for the directory. | +| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether the directory is enabled. | +| `provider` | *Optional[str]* | :heavy_minus_sign: | The identity provider for this directory. | +| `attribute_mapping` | Dict[str, *Nullable[str]*] | :heavy_minus_sign: | Attribute-to-directory-path entries to merge into the directory's attribute mapping.
Set a key to `null` to remove it from the mapping. | +| `group_role_mapping_enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether group-to-role mapping is enabled for this directory. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.Directory](../../models/directory.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| ----------------------- | ----------------------- | ----------------------- | +| models.ClerkErrors | 400, 401, 403, 404, 422 | application/json | +| models.SDKError | 4XX, 5XX | \*/\* | + +## delete + +Deletes a directory and stops provisioning for it. Provisioning requests authenticated +with the directory's API key are rejected afterwards. + +### Example Usage + + +```python +from clerk_backend_api import Clerk + + +with Clerk( + bearer_auth="", +) as clerk: + + res = clerk.directories.delete(directory_id="") + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `directory_id` | *str* | :heavy_check_mark: | The ID of the directory to delete | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.DeletedObject](../../models/deletedobject.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------ | ------------------ | ------------------ | +| models.ClerkErrors | 401, 403, 404 | application/json | +| models.SDKError | 4XX, 5XX | \*/\* | + +## rotate_api_key + +Generates a new API key for the directory and returns it in the `api_key` field. +This is the only way to obtain the key after creation, so make sure to update it in +your identity provider. The previous key remains valid for a short grace period before +it expires. + +### Example Usage + + +```python +from clerk_backend_api import Clerk + + +with Clerk( + bearer_auth="", +) as clerk: + + res = clerk.directories.rotate_api_key(directory_id="") + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `directory_id` | *str* | :heavy_check_mark: | The ID of the directory whose API key to rotate | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.Directory](../../models/directory.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------ | ------------------ | ------------------ | +| models.ClerkErrors | 401, 403, 404, 422 | application/json | +| models.SDKError | 4XX, 5XX | \*/\* | + +## list_group_role_mappings + +Returns the list of directory group to organization role mappings for a directory, ordered by precedence. + +### Example Usage + + +```python +from clerk_backend_api import Clerk + + +with Clerk( + bearer_auth="", +) as clerk: + + res = clerk.directories.list_group_role_mappings(directory_id="") + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `directory_id` | *str* | :heavy_check_mark: | The ID of the directory. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.DirectoryGroupRoleMappingList](../../models/directorygrouprolemappinglist.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------ | ------------------ | ------------------ | +| models.ClerkErrors | 401, 403, 404 | application/json | +| models.SDKError | 4XX, 5XX | \*/\* | + +## create_group_role_mapping + +Creates a new directory group to organization role mapping for a directory. +Mappings can be created while group role mapping is disabled on the +directory, but they only take effect once it is enabled. + +### Example Usage + + +```python +from clerk_backend_api import Clerk + + +with Clerk( + bearer_auth="", +) as clerk: + + res = clerk.directories.create_group_role_mapping(directory_id="", role_id="", directory_group_id="", scim_group_id="", precedence=213856) + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `directory_id` | *str* | :heavy_check_mark: | The ID of the directory. | +| `role_id` | *str* | :heavy_check_mark: | The ID of the organization role to assign to members of the group. | +| `directory_group_id` | *Optional[str]* | :heavy_minus_sign: | The group ID from the identity provider. Exactly one of `directory_group_id` or `scim_group_id` is required. | +| `scim_group_id` | *Optional[str]* | :heavy_minus_sign: | The legacy name for `directory_group_id`. Send either one, or both with the same value; sending both with different values is rejected. | +| `precedence` | *Optional[int]* | :heavy_minus_sign: | The precedence for this mapping. Lower values take priority when a user belongs
to multiple mapped groups. If omitted, the mapping is appended with the
next-highest precedence. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.DirectoryGroupRoleMapping](../../models/directorygrouprolemapping.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| ----------------------- | ----------------------- | ----------------------- | +| models.ClerkErrors | 400, 401, 403, 404, 422 | application/json | +| models.SDKError | 4XX, 5XX | \*/\* | + +## replace_group_role_mappings + +Replaces the entire set of directory group role mappings for a directory. The position of +each item in the `mappings` array determines its precedence (the first item gets +precedence 1). Passing an empty array removes all mappings. Mappings can be replaced +while group role mapping is disabled on the directory, but they only take effect once +it is enabled. + +### Example Usage + + +```python +from clerk_backend_api import Clerk + + +with Clerk( + bearer_auth="", +) as clerk: + + res = clerk.directories.replace_group_role_mappings(directory_id="", mappings=[ + { + "directory_group_id": "", + "scim_group_id": "", + "role_id": "", + }, + ]) + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | +| `directory_id` | *str* | :heavy_check_mark: | The ID of the directory. | +| `mappings` | List[[models.ReplaceDirectoryGroupRoleMappingsMappings](../../models/replacedirectorygrouprolemappingsmappings.md)] | :heavy_check_mark: | The desired set of mappings. Array order sets precedence (1-indexed). An empty array clears all mappings. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.DirectoryGroupRoleMappingList](../../models/directorygrouprolemappinglist.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| ----------------------- | ----------------------- | ----------------------- | +| models.ClerkErrors | 400, 401, 403, 404, 422 | application/json | +| models.SDKError | 4XX, 5XX | \*/\* | + +## delete_group_role_mapping + +Deletes a single directory group role mapping. Mappings can be deleted while group role +mapping is disabled on the directory, but the change only takes effect once it is +enabled. + +### Example Usage + + +```python +from clerk_backend_api import Clerk + + +with Clerk( + bearer_auth="", +) as clerk: + + res = clerk.directories.delete_group_role_mapping(directory_id="", mapping_id="") + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `directory_id` | *str* | :heavy_check_mark: | The ID of the directory. | +| `mapping_id` | *str* | :heavy_check_mark: | The ID of the directory group role mapping to delete. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.DirectoryGroupRoleMappingDeleted](../../models/directorygrouprolemappingdeleted.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------ | ------------------ | ------------------ | +| models.ClerkErrors | 400, 401, 403, 404 | application/json | +| models.SDKError | 4XX, 5XX | \*/\* | \ No newline at end of file diff --git a/docs/sdks/enterpriseconnectionssdk/README.md b/docs/sdks/enterpriseconnectionssdk/README.md index e6fe9f80..cbe0ac11 100644 --- a/docs/sdks/enterpriseconnectionssdk/README.md +++ b/docs/sdks/enterpriseconnectionssdk/README.md @@ -98,6 +98,7 @@ with Clerk( "key": "", "sso_path": "", "scim_path": "", + "directory_path": "", "multi_valued": True, }, ], @@ -217,6 +218,7 @@ with Clerk( "key": "", "sso_path": "", "scim_path": "", + "directory_path": "", "multi_valued": False, }, ]) diff --git a/docs/sdks/instancesettingssdk/README.md b/docs/sdks/instancesettingssdk/README.md index b04a9ae6..cc2449c1 100644 --- a/docs/sdks/instancesettingssdk/README.md +++ b/docs/sdks/instancesettingssdk/README.md @@ -84,6 +84,10 @@ with Clerk( "chrome-extension://extension_uiid", "capacitor://localhost", ], + "allowed_subdomains": [ + "", + ], + "subdomain_allowlist_enabled": True, "url_based_session_syncing": True, "preferred_sign_in_strategy_when_password_required": clerk_backend_api.PreferredSignInStrategyWhenPasswordRequired.PASSWORD, }) @@ -300,6 +304,8 @@ with Clerk( "", ], "oauth_jwt_access_tokens": True, + "aud_claim_enabled": False, + "pkce_required": True, "client_id_metadata_documents_advertised": True, "client_id_metadata_documents_only_allow_pre_registered_clients": False, "client_id_metadata_documents_block_implicitly_allowed_clients": False, diff --git a/docs/sdks/oauthapplicationssdk/README.md b/docs/sdks/oauthapplicationssdk/README.md index fb9af2fd..d70c38a0 100644 --- a/docs/sdks/oauthapplicationssdk/README.md +++ b/docs/sdks/oauthapplicationssdk/README.md @@ -45,7 +45,7 @@ with Clerk( | `limit` | *Optional[int]* | :heavy_minus_sign: | Applies a limit to the number of results returned.
Can be used for paginating the results together with `offset`. | 20 | | `offset` | *Optional[int]* | :heavy_minus_sign: | Skip the first `offset` results when paginating.
Needs to be an integer greater or equal to zero.
To be used in conjunction with `limit`. | 10 | | `order_by` | *Optional[str]* | :heavy_minus_sign: | Allows to return OAuth applications in a particular order.
At the moment, you can order the returned OAuth applications by their `created_at` and `name`.
In order to specify the direction, you can use the `+/-` symbols prepended in the property to order by.
For example, if you want OAuth applications to be returned in descending order according to their `created_at` property, you can use `-created_at`.
If you don't use `+` or `-`, then `+` is implied. We only support one `order_by` parameter, and if multiple `order_by` parameters are provided, we will only keep the first one. For example,
if you pass `order_by=name&order_by=created_at`, we will consider only the first `order_by` parameter, which is `name`. The `created_at` parameter will be ignored in this case. | | -| `name_query` | *Optional[str]* | :heavy_minus_sign: | Returns OAuth applications with names that match the given query, via case-insensitive partial match. | | +| `name_query` | *Optional[str]* | :heavy_minus_sign: | Returns OAuth applications with names that match the given query, via case-insensitive partial match.
Also returns the OAuth application whose `client_id` is exactly the given query, which is useful for
resolving a `client_id` to the OAuth application `id` required by the read, update and delete endpoints. | | | `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | | ### Response @@ -163,7 +163,7 @@ with Clerk( bearer_auth="", ) as clerk: - res = clerk.oauth_applications.update(oauth_application_id="oauth_app_67890", name="Updated OAuth App Name", redirect_uris=None, scopes="profile email public_metadata private_metadata", consent_screen_enabled=None, pkce_required=None, public=None) + res = clerk.oauth_applications.update(oauth_application_id="oauth_app_67890", name="Updated OAuth App Name", redirect_uris=None, scopes="profile email public_metadata private_metadata", consent_screen_enabled=None, pkce_required=None, device_authorization_grant_enabled=None, public=None) # Handle response print(res) @@ -172,17 +172,18 @@ with Clerk( ### Parameters -| Parameter | Type | Required | Description | Example | -| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `oauth_application_id` | *str* | :heavy_check_mark: | The ID of the OAuth application to update | oauth_app_67890 | -| `name` | *OptionalNullable[str]* | :heavy_minus_sign: | The new name of the OAuth application.
Max length: 256 | Updated OAuth App Name | -| `redirect_uris` | List[*str*] | :heavy_minus_sign: | An array of redirect URIs of the new OAuth application | | -| `callback_url` | *OptionalNullable[str]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

The new callback URL of the OAuth application | https://example.com/oauth/callback | -| `scopes` | *OptionalNullable[str]* | :heavy_minus_sign: | Define the allowed scopes for the new OAuth applications that dictate the user payload of the OAuth user info endpoint. Available scopes are `profile`, `email`, `public_metadata`, `private_metadata`. Provide the requested scopes as a string, separated by spaces. | profile email public_metadata private_metadata | -| `consent_screen_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | True to enable a consent screen to display in the authentication flow. This cannot be disabled for dynamically registered OAuth Applications. | | -| `pkce_required` | *OptionalNullable[bool]* | :heavy_minus_sign: | True to require the Proof Key of Code Exchange (PKCE) flow. | | -| `public` | *OptionalNullable[bool]* | :heavy_minus_sign: | If true, this client is public and you can use the Proof Key of Code Exchange (PKCE) flow. | | -| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | | +| Parameter | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `oauth_application_id` | *str* | :heavy_check_mark: | The ID of the OAuth application to update | oauth_app_67890 | +| `name` | *OptionalNullable[str]* | :heavy_minus_sign: | The new name of the OAuth application.
Max length: 256 | Updated OAuth App Name | +| `redirect_uris` | List[*str*] | :heavy_minus_sign: | An array of redirect URIs of the new OAuth application | | +| `callback_url` | *OptionalNullable[str]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

The new callback URL of the OAuth application | https://example.com/oauth/callback | +| `scopes` | *OptionalNullable[str]* | :heavy_minus_sign: | Replace the application's complete built-in and custom scope ceiling. Provide scope keys as a space-delimited string. Custom keys must exist in the instance OAuth scope catalog. Required built-in scopes, such as `offline_access`, must be included in the replacement set, otherwise the request is rejected. Omit this field to leave all scope assignments unchanged. | profile email offline_access public_metadata private_metadata | +| `consent_screen_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | True to enable a consent screen to display in the authentication flow. This cannot be disabled for dynamically registered OAuth Applications. | | +| `pkce_required` | *OptionalNullable[bool]* | :heavy_minus_sign: | True to require the Proof Key of Code Exchange (PKCE) flow. | | +| `device_authorization_grant_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | True to enable the OAuth Device Authorization Grant for this application. Enabling requires the OAuth Device Authorization Grant feature to be enabled for the instance. Omit this field to leave the setting unchanged. | | +| `public` | *OptionalNullable[bool]* | :heavy_minus_sign: | If true, this client is public and you can use the Proof Key of Code Exchange (PKCE) flow. | | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | | ### Response diff --git a/docs/sdks/organizationssdk/README.md b/docs/sdks/organizationssdk/README.md index f949baae..48707ee1 100644 --- a/docs/sdks/organizationssdk/README.md +++ b/docs/sdks/organizationssdk/README.md @@ -193,7 +193,7 @@ with Clerk( bearer_auth="", ) as clerk: - res = clerk.organizations.update(organization_id="org_123_update", name="New Organization Name", slug="new-org-slug", max_allowed_memberships=100, admin_delete_enabled=True, created_at="1720203056033", role_set_key="") + res = clerk.organizations.update(organization_id="org_123_update", name="New Organization Name", slug="new-org-slug", max_allowed_memberships=100, admin_delete_enabled=True, self_serve_sso_enabled=False, created_at="1720203056033", role_set_key="") # Handle response print(res) @@ -202,16 +202,17 @@ with Clerk( ### Parameters -| Parameter | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | -| `organization_id` | *str* | :heavy_check_mark: | The ID of the organization to update | org_123_update | -| `name` | *OptionalNullable[str]* | :heavy_minus_sign: | The new name of the organization.
May not contain URLs or HTML.
Max length: 256 | New Organization Name | -| `slug` | *OptionalNullable[str]* | :heavy_minus_sign: | The new slug of the organization, which needs to be unique in the instance | new-org-slug | -| `max_allowed_memberships` | *OptionalNullable[int]* | :heavy_minus_sign: | The maximum number of memberships allowed for this organization | 100 | -| `admin_delete_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | If true, an admin can delete this organization with the Frontend API. | true | -| `created_at` | *OptionalNullable[str]* | :heavy_minus_sign: | A custom date/time denoting _when_ the organization was created, specified in RFC3339 format (e.g. `2012-10-20T07:15:20.902Z`). | | -| `role_set_key` | *OptionalNullable[str]* | :heavy_minus_sign: | The key of the [role set](https://clerk.com/docs/guides/organizations/control-access/role-sets) to assign to this organization. | | -| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | | +| Parameter | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `organization_id` | *str* | :heavy_check_mark: | The ID of the organization to update | org_123_update | +| `name` | *OptionalNullable[str]* | :heavy_minus_sign: | The new name of the organization.
May not contain URLs or HTML.
Max length: 256 | New Organization Name | +| `slug` | *OptionalNullable[str]* | :heavy_minus_sign: | The new slug of the organization, which needs to be unique in the instance | new-org-slug | +| `max_allowed_memberships` | *OptionalNullable[int]* | :heavy_minus_sign: | The maximum number of memberships allowed for this organization | 100 | +| `admin_delete_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | If true, an admin can delete this organization with the Frontend API. | true | +| `self_serve_sso_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether this organization can configure self-serve enterprise SSO.
Requires the instance to have the self-serve SSO entitlement enabled. | | +| `created_at` | *OptionalNullable[str]* | :heavy_minus_sign: | A custom date/time denoting _when_ the organization was created, specified in RFC3339 format (e.g. `2012-10-20T07:15:20.902Z`). | | +| `role_set_key` | *OptionalNullable[str]* | :heavy_minus_sign: | The key of the [role set](https://clerk.com/docs/guides/organizations/control-access/role-sets) to assign to this organization. | | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | | ### Response diff --git a/docs/sdks/scimdirectories/README.md b/docs/sdks/scimdirectories/README.md index 5f081e03..b85c8dd3 100644 --- a/docs/sdks/scimdirectories/README.md +++ b/docs/sdks/scimdirectories/README.md @@ -4,12 +4,12 @@ ### Available Operations -* [list](#list) - List all SCIM directories -* [create](#create) - Create a SCIM directory -* [get](#get) - Retrieve a SCIM directory -* [update](#update) - Update a SCIM directory -* [delete](#delete) - Delete a SCIM directory -* [rotate_api_key](#rotate_api_key) - Rotate a SCIM directory's API key +* [list](#list) - List all directories +* [create](#create) - Create a directory +* [get](#get) - Retrieve a directory +* [update](#update) - Update a directory +* [delete](#delete) - Delete a directory +* [rotate_api_key](#rotate_api_key) - Rotate a directory's API key * [list_group_role_mappings](#list_group_role_mappings) - List SCIM group role mappings * [create_group_role_mapping](#create_group_role_mapping) - Create a SCIM group role mapping * [replace_group_role_mappings](#replace_group_role_mappings) - Replace SCIM group role mappings @@ -17,7 +17,7 @@ ## list -Returns a list of all SCIM directories for the instance. +Returns a list of all directories for the instance. ### Example Usage @@ -58,7 +58,7 @@ with Clerk( ## create -Create a new SCIM directory for the instance. +Create a new directory for the instance. ### Example Usage @@ -110,7 +110,7 @@ with Clerk( ## get -Returns the details of a SCIM directory. +Returns the details of a directory. ### Example Usage @@ -134,7 +134,7 @@ with Clerk( | Parameter | Type | Required | Description | | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | -| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the SCIM directory to retrieve | +| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the directory to retrieve | | `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | ### Response @@ -150,7 +150,7 @@ with Clerk( ## update -Updates a SCIM directory. +Updates a directory. ### Example Usage @@ -178,12 +178,12 @@ with Clerk( | Parameter | Type | Required | Description | | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | -| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the SCIM directory to update | -| `name` | *Optional[str]* | :heavy_minus_sign: | A human-friendly name for the SCIM directory. | -| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether the SCIM directory is enabled. | -| `provider` | *Optional[str]* | :heavy_minus_sign: | The identity provider for this SCIM directory. | +| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the directory to update | +| `name` | *Optional[str]* | :heavy_minus_sign: | A human-friendly name for the directory. | +| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether the directory is enabled. | +| `provider` | *Optional[str]* | :heavy_minus_sign: | The identity provider for this directory. | | `attribute_mapping` | Dict[str, *Nullable[str]*] | :heavy_minus_sign: | Attribute-to-SCIM-path entries to merge into the directory's attribute mapping.
Set a key to `null` to remove it from the mapping. | -| `group_role_mapping_enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether group-to-role mapping is enabled for this SCIM directory. | +| `group_role_mapping_enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether group-to-role mapping is enabled for this directory. | | `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | ### Response @@ -199,7 +199,7 @@ with Clerk( ## delete -Deletes a SCIM directory and stops provisioning for it. SCIM requests authenticated +Deletes a directory and stops provisioning for it. SCIM requests authenticated with the directory's API key are rejected afterwards. ### Example Usage @@ -224,7 +224,7 @@ with Clerk( | Parameter | Type | Required | Description | | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | -| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the SCIM directory to delete | +| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the directory to delete | | `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | ### Response @@ -240,7 +240,7 @@ with Clerk( ## rotate_api_key -Generates a new API key for the SCIM directory and returns it in the `api_key` field. +Generates a new API key for the directory and returns it in the `api_key` field. This is the only way to obtain the key after creation, so make sure to update it in your identity provider. The previous key remains valid for a short grace period before it expires. @@ -267,7 +267,7 @@ with Clerk( | Parameter | Type | Required | Description | | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | -| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the SCIM directory whose API key to rotate | +| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the directory whose API key to rotate | | `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | ### Response @@ -278,12 +278,12 @@ with Clerk( | Error Type | Status Code | Content Type | | ------------------ | ------------------ | ------------------ | -| models.ClerkErrors | 401, 403, 404 | application/json | +| models.ClerkErrors | 401, 403, 404, 422 | application/json | | models.SDKError | 4XX, 5XX | \*/\* | ## list_group_role_mappings -Returns the list of SCIM group to organization role mappings for a SCIM directory, ordered by precedence. +Returns the list of SCIM group to organization role mappings for a directory, ordered by precedence. ### Example Usage @@ -307,7 +307,7 @@ with Clerk( | Parameter | Type | Required | Description | | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | -| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the SCIM directory. | +| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the directory. | | `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | ### Response @@ -323,8 +323,9 @@ with Clerk( ## create_group_role_mapping -Creates a new SCIM group to organization role mapping for a SCIM directory. -Group role mapping must be enabled on the directory. +Creates a new SCIM group to organization role mapping for a directory. +Mappings can be created while group role mapping is disabled on the +directory, but they only take effect once it is enabled. ### Example Usage @@ -348,7 +349,7 @@ with Clerk( | Parameter | Type | Required | Description | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the SCIM directory. | +| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the directory. | | `scim_group_id` | *str* | :heavy_check_mark: | The SCIM group ID from the identity provider. | | `role_id` | *str* | :heavy_check_mark: | The ID of the organization role to assign to members of the SCIM group. | | `precedence` | *Optional[int]* | :heavy_minus_sign: | The precedence for this mapping. Lower values take priority when a user belongs
to multiple mapped groups. If omitted, the mapping is appended with the
next-highest precedence. | @@ -369,8 +370,9 @@ with Clerk( Replaces the entire set of SCIM group role mappings for a directory. The position of each item in the `mappings` array determines its precedence (the first item gets -precedence 1). Passing an empty array removes all mappings. Group role mapping must be -enabled on the directory. +precedence 1). Passing an empty array removes all mappings. Mappings can be replaced +while group role mapping is disabled on the directory, but they only take effect once +it is enabled. ### Example Usage @@ -394,7 +396,7 @@ with Clerk( | Parameter | Type | Required | Description | | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | -| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the SCIM directory. | +| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the directory. | | `mappings` | List[[models.Mappings](../../models/mappings.md)] | :heavy_check_mark: | The desired set of mappings. Array order sets precedence (1-indexed). An empty array clears all mappings. | | `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | @@ -411,8 +413,9 @@ with Clerk( ## delete_group_role_mapping -Deletes a single SCIM group role mapping. Group role mapping must be enabled on the -directory. +Deletes a single SCIM group role mapping. Mappings can be deleted while group role +mapping is disabled on the directory, but the change only takes effect once it is +enabled. ### Example Usage @@ -436,7 +439,7 @@ with Clerk( | Parameter | Type | Required | Description | | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | -| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the SCIM directory. | +| `scim_directory_id` | *str* | :heavy_check_mark: | The ID of the directory. | | `mapping_id` | *str* | :heavy_check_mark: | The ID of the SCIM group role mapping to delete. | | `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | diff --git a/docs/sdks/users/README.md b/docs/sdks/users/README.md index 3839bebe..709571a9 100644 --- a/docs/sdks/users/README.md +++ b/docs/sdks/users/README.md @@ -32,8 +32,10 @@ * [disable_mfa](#disable_mfa) - Disable a user's MFA methods * [delete_backup_codes](#delete_backup_codes) - Disable all user's Backup codes * [delete_passkey](#delete_passkey) - Delete a user passkey -* [list_trusted_devices](#list_trusted_devices) - List a user's trusted devices -* [revoke_trusted_device](#revoke_trusted_device) - Revoke a user's trusted device +* [~~list_trusted_devices~~](#list_trusted_devices) - List a user's trusted devices :warning: **Deprecated** +* [~~revoke_trusted_device~~](#revoke_trusted_device) - Revoke a user's trusted device :warning: **Deprecated** +* [list_biometric_credentials](#list_biometric_credentials) - List a user's biometric credentials +* [revoke_biometric_credential](#revoke_biometric_credential) - Revoke a user's biometric credential * [delete_web3_wallet](#delete_web3_wallet) - Delete a user web3 wallet * [delete_totp](#delete_totp) - Delete all the user's TOTPs * [delete_external_account](#delete_external_account) - Delete External Account @@ -46,6 +48,11 @@ Returns a list of all users. The users are returned sorted by creation date, with the newest users appearing first. +To walk more than a few pages, paginate with `starting_after` rather than `offset`. +A cursor page costs the same no matter how far into the list it sits, while a large `offset` +has to walk and discard every row before it, so it gets progressively slower and eventually +times out. Cursor pagination requires the `created_at` ordering, which is the default. + ### Example Usage @@ -98,6 +105,7 @@ with Clerk( ], "limit": 20, "offset": 10, + "starting_after": "", }) # Handle response @@ -155,7 +163,7 @@ with Clerk( clerk_backend_api.PhoneNumberIdentificationStatus.VERIFIED, ], web3_wallet=[ "0x123456789abcdef0x123456789abcdef", - ], username="johndoe123", password="Secure*Pass4", password_digest="$argon2i$v=19$m=4096,t=3,p=1$4t6CL3P7YiHBtwESXawI8Hm20zJj4cs7/4/G3c187e0$m7RQFczcKr5bIR0IIxbpO2P0tyrLjf3eUW3M3QSwnLc", password_hasher="", skip_password_checks=False, skip_password_requirement=False, totp_secret="base32totpsecretkey", backup_codes=[ + ], username="johndoe123", password="Secure*Pass4", password_digest="$argon2i$v=19$m=4096,t=3,p=1$4t6CL3P7YiHBtwESXawI8Hm20zJj4cs7/4/G3c187e0$m7RQFczcKr5bIR0IIxbpO2P0tyrLjf3eUW3M3QSwnLc", password_hasher="", skip_password_checks=False, skip_password_requirement=False, skip_restriction_checks=True, totp_secret="base32totpsecretkey", backup_codes=[ "123456", "654321", ], public_metadata={ @@ -192,6 +200,7 @@ with Clerk( | `password_hasher` | *Optional[str]* | :heavy_minus_sign: | The hashing algorithm that was used to generate the password digest.

The algorithms we support at the moment are [`bcrypt`](https://en.wikipedia.org/wiki/Bcrypt), [`bcrypt_sha256_django`](https://docs.djangoproject.com/en/4.0/topics/auth/passwords/), [`md5`](https://en.wikipedia.org/wiki/MD5), `pbkdf2_sha1`, `pbkdf2_sha256`, [`pbkdf2_sha256_django`](https://docs.djangoproject.com/en/4.0/topics/auth/passwords/),
`pbkdf2_sha512`, [`phpass`](https://www.openwall.com/phpass/), `md5_phpass`, [`scrypt_firebase`](https://firebaseopensource.com/projects/firebase/scrypt/),
[`scrypt_werkzeug`](https://werkzeug.palletsprojects.com/en/3.0.x/utils/#werkzeug.security.generate_password_hash), [`sha256`](https://en.wikipedia.org/wiki/SHA-2),
[`ldap_ssha`](https://www.openldap.org/faq/data/cache/347.html), the [`argon2`](https://argon2.online/) variants: `argon2i` and `argon2id`, `sha512_symfony`, the SHA-512 variant of the [Symfony](https://symfony.com/doc/current/security/passwords.html) legacy hasher,
and `pbkdf2_sha512_hex`, a variant of `pbkdf2_sha512` that accepts hex-encoded salt and hash.

Each of the supported hashers expects the incoming digest to be in a particular format. See the [Clerk docs](https://clerk.com/docs/references/backend/user/create-user) for more information. | | | `skip_password_checks` | *OptionalNullable[bool]* | :heavy_minus_sign: | When set to `true` all password checks are skipped.
It is recommended to use this method only when migrating plaintext passwords to Clerk.
Upon migration the user base should be prompted to pick stronger password. | false | | `skip_password_requirement` | *OptionalNullable[bool]* | :heavy_minus_sign: | When set to `true`, `password` is not required anymore when creating the user and can be omitted.
This is useful when you are trying to create a user that doesn't have a password, in an instance that is using passwords.
Please note that you cannot use this flag if password is the only way for a user to sign into your instance. | false | +| `skip_restriction_checks` | *OptionalNullable[bool]* | :heavy_minus_sign: | When set to `true`, the instance's restrictions are not applied to this user.
Those settings are the allowlist, the blocklist, blocked disposable email domains and blocked email subaddresses, and they normally reject a matching identifier here just as they do at sign-up.
Use this when your backend is creating a user it already trusts, such as during a migration or from an admin tool. | | | `totp_secret` | *OptionalNullable[str]* | :heavy_minus_sign: | In case TOTP is configured on the instance, you can provide the secret to enable it on the newly created user without the need to reset it.
Please note that currently the supported options are:
* Period: 30 seconds
* Code length: 6 digits
* Algorithm: SHA1 | base32totpsecretkey | | `backup_codes` | List[*str*] | :heavy_minus_sign: | If Backup Codes are configured on the instance, you can provide them to enable it on the newly created user without the need to reset them.
You must provide the backup codes in plain format or the corresponding bcrypt digest. | [
"123456",
"654321"
] | | `public_metadata` | Dict[str, *Any*] | :heavy_minus_sign: | Metadata saved on the user, that is visible to both your Frontend and Backend APIs | {
"role": "user"
} | @@ -204,7 +213,7 @@ with Clerk( | `create_organization_enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | If enabled, user can create organizations via FAPI.
| | | `create_organizations_limit` | *OptionalNullable[int]* | :heavy_minus_sign: | The maximum number of organizations the user can create. 0 means unlimited.
| | | `created_at` | *OptionalNullable[str]* | :heavy_minus_sign: | A custom date/time denoting _when_ the user signed up to the application, specified in RFC3339 format (e.g. `2012-10-20T07:15:20.902Z`). | 2023-03-15T07:15:20.902Z | -| `bypass_client_trust` | *OptionalNullable[bool]* | :heavy_minus_sign: | When set to `true`, the user will bypass client trust checks during sign-in. | | +| `bypass_client_trust` | *OptionalNullable[bool]* | :heavy_minus_sign: | When set to `true`, the user will bypass Device Trust checks during sign-in. | | | `banned` | *OptionalNullable[bool]* | :heavy_minus_sign: | When set to `true`, the user is created already banned and cannot sign in.
Requires the same plan support as the ban user endpoint. | | | `locked` | *OptionalNullable[bool]* | :heavy_minus_sign: | When set to `true`, the user is created already locked.
Requires the user lockout feature to be enabled on the instance. | | | `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | | @@ -401,7 +410,7 @@ with Clerk( | `skip_legal_checks` | *OptionalNullable[bool]* | :heavy_minus_sign: | When set to `true` all legal checks are skipped. | | | `create_organizations_limit` | *OptionalNullable[int]* | :heavy_minus_sign: | The maximum number of organizations the user can create. 0 means unlimited. | | | `created_at` | *OptionalNullable[str]* | :heavy_minus_sign: | A custom date/time denoting _when_ the user signed up to the application. | 2021-04-05T14:30:00.000Z | -| `bypass_client_trust` | *OptionalNullable[bool]* | :heavy_minus_sign: | When set to `true`, the user will bypass client trust checks during sign-in. | | +| `bypass_client_trust` | *OptionalNullable[bool]* | :heavy_minus_sign: | When set to `true`, the user will bypass Device Trust checks during sign-in. | | | `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | | ### Response @@ -1427,10 +1436,12 @@ with Clerk( | models.ClerkErrors | 500 | application/json | | models.SDKError | 4XX, 5XX | \*/\* | -## list_trusted_devices +## ~~list_trusted_devices~~ Returns the active trusted devices enrolled by the user. +> :warning: **DEPRECATED**: This will be removed in a future release, please migrate away from it as soon as possible. + ### Example Usage @@ -1468,10 +1479,12 @@ with Clerk( | models.ClerkErrors | 500 | application/json | | models.SDKError | 4XX, 5XX | \*/\* | -## revoke_trusted_device +## ~~revoke_trusted_device~~ Revokes an active trusted device enrolled by the user. +> :warning: **DEPRECATED**: This will be removed in a future release, please migrate away from it as soon as possible. + ### Example Usage @@ -1510,6 +1523,89 @@ with Clerk( | models.ClerkErrors | 500 | application/json | | models.SDKError | 4XX, 5XX | \*/\* | +## list_biometric_credentials + +Returns the active biometric credentials enrolled by the user. + +### Example Usage + + +```python +from clerk_backend_api import Clerk + + +with Clerk( + bearer_auth="", +) as clerk: + + res = clerk.users.list_biometric_credentials(user_id="") + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `user_id` | *str* | :heavy_check_mark: | The ID of the user whose biometric credentials are returned | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.BiometricCredentialList](../../models/biometriccredentiallist.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------ | ------------------ | ------------------ | +| models.ClerkErrors | 403, 404 | application/json | +| models.ClerkErrors | 500 | application/json | +| models.SDKError | 4XX, 5XX | \*/\* | + +## revoke_biometric_credential + +Revokes an active biometric credential enrolled by the user. + +### Example Usage + + +```python +from clerk_backend_api import Clerk + + +with Clerk( + bearer_auth="", +) as clerk: + + res = clerk.users.revoke_biometric_credential(user_id="", biometric_credential_id="") + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `user_id` | *str* | :heavy_check_mark: | The ID of the user that owns the biometric credential | +| `biometric_credential_id` | *str* | :heavy_check_mark: | The ID of the biometric credential to revoke | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.BiometricCredential](../../models/biometriccredential.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------ | ------------------ | ------------------ | +| models.ClerkErrors | 403, 404 | application/json | +| models.ClerkErrors | 500 | application/json | +| models.SDKError | 4XX, 5XX | \*/\* | + ## delete_web3_wallet Delete the web3 wallet identification for a given user. diff --git a/poetry.lock b/poetry.lock index 17356bd2..c376c2cc 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.4.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.2.1 and should not be changed by hand. [[package]] name = "annotated-types" @@ -698,12 +698,12 @@ files = [ ] [package.dependencies] -astroid = ">=3.2.2,<=3.3.0.dev0" +astroid = ">=3.2.2,<=3.3.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, - {version = ">=0.3.6", markers = "python_version == \"3.11\""}, {version = ">=0.3.7", markers = "python_version >= \"3.12\""}, + {version = ">=0.3.6", markers = "python_version == \"3.11\""}, ] isort = ">=4.2.5,<5.13.0 || >5.13.0,<6" mccabe = ">=0.6,<0.8" @@ -796,19 +796,6 @@ files = [ {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, ] -[[package]] -name = "typing-extensions" -version = "4.12.2" -description = "Backported and Experimental Type Hints for Python 3.8+" -optional = false -python-versions = ">=3.8" -groups = ["main", "dev"] -markers = "python_version >= \"3.11\"" -files = [ - {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, - {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, -] - [[package]] name = "typing-extensions" version = "4.16.0" @@ -816,7 +803,6 @@ description = "Backported and Experimental Type Hints for Python 3.9+" optional = false python-versions = ">=3.9" groups = ["main", "dev"] -markers = "python_version == \"3.10\"" files = [ {file = "typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8"}, {file = "typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5"}, diff --git a/pyproject.toml b/pyproject.toml index 20dd9d0a..4d72f1e5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "clerk-backend-api" -version = "7.0.0" +version = "7.1.0" description = "Python Client SDK for clerk.dev" authors = [{ name = "Clerk" },] readme = "README-PYPI.md" diff --git a/src/clerk_backend_api/_version.py b/src/clerk_backend_api/_version.py index 0531f668..78efba4c 100644 --- a/src/clerk_backend_api/_version.py +++ b/src/clerk_backend_api/_version.py @@ -3,10 +3,10 @@ import importlib.metadata __title__: str = "clerk-backend-api" -__version__: str = "7.0.0" +__version__: str = "7.1.0" __openapi_doc_version__: str = "2026-05-12" -__gen_version__: str = "2.928.0" -__user_agent__: str = "speakeasy-sdk/python 7.0.0 2.928.0 2026-05-12 clerk-backend-api" +__gen_version__: str = "2.935.1" +__user_agent__: str = "speakeasy-sdk/python 7.1.0 2.935.1 2026-05-12 clerk-backend-api" try: if __package__ is not None: diff --git a/src/clerk_backend_api/actortokens.py b/src/clerk_backend_api/actortokens.py index 61505b20..f19e7a76 100644 --- a/src/clerk_backend_api/actortokens.py +++ b/src/clerk_backend_api/actortokens.py @@ -104,7 +104,9 @@ def create( response_data: Any = None if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response(models.ActorToken, http_res) - if utils.match_response(http_res, ["400", "402", "422"], "application/json"): + if utils.match_response( + http_res, ["400", "402", "403", "422"], "application/json" + ): response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) raise models.ClerkErrors(response_data, http_res) if utils.match_response(http_res, "4XX", "*"): @@ -211,7 +213,9 @@ async def create_async( response_data: Any = None if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response(models.ActorToken, http_res) - if utils.match_response(http_res, ["400", "402", "422"], "application/json"): + if utils.match_response( + http_res, ["400", "402", "403", "422"], "application/json" + ): response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) raise models.ClerkErrors(response_data, http_res) if utils.match_response(http_res, "4XX", "*"): diff --git a/src/clerk_backend_api/billing.py b/src/clerk_backend_api/billing.py index 84e86034..df3126f7 100644 --- a/src/clerk_backend_api/billing.py +++ b/src/clerk_backend_api/billing.py @@ -484,9 +484,9 @@ def create_price( to specific customers while maintaining the same plan structure. :param plan_id: The ID of the plan this price belongs to. - :param amount: The monthly amount in cents. Must be at least $1 (100 cents) if not null. + :param amount: The monthly amount in cents. Use `0` for a complimentary price. Positive amounts must be at least $1 (100 cents). :param currency: The currency code (e.g., \"USD\"). Defaults to USD. - :param annual_monthly_amount: The monthly amount in cents when billed annually. Must be at least $1 (100 cents) if not null. + :param annual_monthly_amount: The monthly amount in cents when billed annually. Use `0` for a complimentary price. Positive amounts must be at least $1 (100 cents). :param description: An optional description for this custom price. :param supported_billing_periods: Which billing periods this price supports. Inferred from amounts if omitted. :param retries: Override the default retry configuration for this method @@ -602,9 +602,9 @@ async def create_price_async( to specific customers while maintaining the same plan structure. :param plan_id: The ID of the plan this price belongs to. - :param amount: The monthly amount in cents. Must be at least $1 (100 cents) if not null. + :param amount: The monthly amount in cents. Use `0` for a complimentary price. Positive amounts must be at least $1 (100 cents). :param currency: The currency code (e.g., \"USD\"). Defaults to USD. - :param annual_monthly_amount: The monthly amount in cents when billed annually. Must be at least $1 (100 cents) if not null. + :param annual_monthly_amount: The monthly amount in cents when billed annually. Use `0` for a complimentary price. Positive amounts must be at least $1 (100 cents). :param description: An optional description for this custom price. :param supported_billing_periods: Which billing periods this price supports. Inferred from amounts if omitted. :param retries: Override the default retry configuration for this method @@ -1602,6 +1602,440 @@ async def create_price_transition_async( raise models.SDKError("Unexpected response received", http_res) + def apply_subscription_item_discount( + self, + *, + subscription_item_id: str, + discount_id: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.CommerceDiscountRedemptionResponse: + r"""Apply a discount to a subscription item + + Applies an existing discount to a subscription item. + Manual application is an override path: self-serve distribution rules are not enforced. + At most one active discount is allowed per subscription item; applying a different + discount replaces the currently active one. Re-applying the same active discount returns a conflict. + + :param subscription_item_id: The ID of the subscription item to apply the discount to + :param discount_id: The ID of the discount to apply to the subscription item. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.ApplyBillingSubscriptionItemDiscountRequest( + subscription_item_id=subscription_item_id, + apply_commerce_discount_request=models.ApplyCommerceDiscountRequest( + discount_id=discount_id, + ), + ) + + req = self._build_request( + method="POST", + path="/billing/subscription_items/{subscription_item_id}/discounts", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request.apply_commerce_discount_request, + False, + False, + "json", + models.ApplyCommerceDiscountRequest, + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="ApplyBillingSubscriptionItemDiscount", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Billing"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response( + models.CommerceDiscountRedemptionResponse, http_res + ) + if utils.match_response( + http_res, ["400", "401", "403", "404", "409", "422"], "application/json" + ): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "500", "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + async def apply_subscription_item_discount_async( + self, + *, + subscription_item_id: str, + discount_id: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.CommerceDiscountRedemptionResponse: + r"""Apply a discount to a subscription item + + Applies an existing discount to a subscription item. + Manual application is an override path: self-serve distribution rules are not enforced. + At most one active discount is allowed per subscription item; applying a different + discount replaces the currently active one. Re-applying the same active discount returns a conflict. + + :param subscription_item_id: The ID of the subscription item to apply the discount to + :param discount_id: The ID of the discount to apply to the subscription item. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.ApplyBillingSubscriptionItemDiscountRequest( + subscription_item_id=subscription_item_id, + apply_commerce_discount_request=models.ApplyCommerceDiscountRequest( + discount_id=discount_id, + ), + ) + + req = self._build_request_async( + method="POST", + path="/billing/subscription_items/{subscription_item_id}/discounts", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request.apply_commerce_discount_request, + False, + False, + "json", + models.ApplyCommerceDiscountRequest, + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="ApplyBillingSubscriptionItemDiscount", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Billing"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response( + models.CommerceDiscountRedemptionResponse, http_res + ) + if utils.match_response( + http_res, ["400", "401", "403", "404", "409", "422"], "application/json" + ): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "500", "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + def remove_subscription_item_discount( + self, + *, + subscription_item_id: str, + discount_id: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.CommerceDiscountRedemptionResponse: + r"""Remove a discount from a subscription item + + Removes the active discount from a subscription item. + The discount_id must match the subscription item's currently active discount. + + :param subscription_item_id: The ID of the subscription item to remove the discount from + :param discount_id: The ID of the discount to remove + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.RemoveBillingSubscriptionItemDiscountRequest( + subscription_item_id=subscription_item_id, + discount_id=discount_id, + ) + + req = self._build_request( + method="DELETE", + path="/billing/subscription_items/{subscription_item_id}/discounts/{discount_id}", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="RemoveBillingSubscriptionItemDiscount", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Billing"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response( + models.CommerceDiscountRedemptionResponse, http_res + ) + if utils.match_response( + http_res, ["400", "401", "403", "404", "409", "422"], "application/json" + ): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "500", "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + async def remove_subscription_item_discount_async( + self, + *, + subscription_item_id: str, + discount_id: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.CommerceDiscountRedemptionResponse: + r"""Remove a discount from a subscription item + + Removes the active discount from a subscription item. + The discount_id must match the subscription item's currently active discount. + + :param subscription_item_id: The ID of the subscription item to remove the discount from + :param discount_id: The ID of the discount to remove + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.RemoveBillingSubscriptionItemDiscountRequest( + subscription_item_id=subscription_item_id, + discount_id=discount_id, + ) + + req = self._build_request_async( + method="DELETE", + path="/billing/subscription_items/{subscription_item_id}/discounts/{discount_id}", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="RemoveBillingSubscriptionItemDiscount", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Billing"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response( + models.CommerceDiscountRedemptionResponse, http_res + ) + if utils.match_response( + http_res, ["400", "401", "403", "404", "409", "422"], "application/json" + ): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "500", "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + def list_statements( self, *, diff --git a/src/clerk_backend_api/directories.py b/src/clerk_backend_api/directories.py new file mode 100644 index 00000000..3e565b24 --- /dev/null +++ b/src/clerk_backend_api/directories.py @@ -0,0 +1,2090 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from .basesdk import BaseSDK +from clerk_backend_api import models, utils +from clerk_backend_api._hooks import HookContext +from clerk_backend_api.types import BaseModel, Nullable, OptionalNullable, UNSET +from clerk_backend_api.utils.unmarshal_json_response import unmarshal_json_response +from typing import Any, Dict, Iterable, List, Mapping, Optional, Union, cast + + +class Directories(BaseSDK): + def list( + self, + *, + limit: Optional[int] = 10, + offset: Optional[int] = 0, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.DirectoryList: + r"""List all directories + + Returns a list of all directories for the instance. + + :param limit: Applies a limit to the number of results returned. + Can be used for paginating the results together with `offset`. + :param offset: Skip the first `offset` results when paginating. + Needs to be an integer greater or equal to zero. + To be used in conjunction with `limit`. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.ListDirectoriesRequest( + limit=limit, + offset=offset, + ) + + req = self._build_request( + method="GET", + path="/directories", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="ListDirectories", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Directories"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.DirectoryList, http_res) + if utils.match_response(http_res, ["401", "403"], "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + async def list_async( + self, + *, + limit: Optional[int] = 10, + offset: Optional[int] = 0, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.DirectoryList: + r"""List all directories + + Returns a list of all directories for the instance. + + :param limit: Applies a limit to the number of results returned. + Can be used for paginating the results together with `offset`. + :param offset: Skip the first `offset` results when paginating. + Needs to be an integer greater or equal to zero. + To be used in conjunction with `limit`. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.ListDirectoriesRequest( + limit=limit, + offset=offset, + ) + + req = self._build_request_async( + method="GET", + path="/directories", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="ListDirectories", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Directories"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.DirectoryList, http_res) + if utils.match_response(http_res, ["401", "403"], "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + def create( + self, + *, + request: Optional[ + Union[ + models.CreateDirectoryRequestBody, + models.CreateDirectoryRequestBodyTypedDict, + ] + ] = None, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.Directory: + r"""Create a directory + + Create a new directory for the instance. + + :param request: The request object to send. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + if not isinstance(request, BaseModel): + request = utils.unmarshal( + request, Optional[models.CreateDirectoryRequestBody] + ) + request = cast(Optional[models.CreateDirectoryRequestBody], request) + + req = self._build_request( + method="POST", + path="/directories", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request, + False, + True, + "json", + Optional[models.CreateDirectoryRequestBody], + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="CreateDirectory", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Directories"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.Directory, http_res) + if utils.match_response( + http_res, ["400", "401", "403", "422"], "application/json" + ): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + async def create_async( + self, + *, + request: Optional[ + Union[ + models.CreateDirectoryRequestBody, + models.CreateDirectoryRequestBodyTypedDict, + ] + ] = None, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.Directory: + r"""Create a directory + + Create a new directory for the instance. + + :param request: The request object to send. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + if not isinstance(request, BaseModel): + request = utils.unmarshal( + request, Optional[models.CreateDirectoryRequestBody] + ) + request = cast(Optional[models.CreateDirectoryRequestBody], request) + + req = self._build_request_async( + method="POST", + path="/directories", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request, + False, + True, + "json", + Optional[models.CreateDirectoryRequestBody], + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="CreateDirectory", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Directories"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.Directory, http_res) + if utils.match_response( + http_res, ["400", "401", "403", "422"], "application/json" + ): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + def get( + self, + *, + directory_id: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.Directory: + r"""Retrieve a directory + + Returns the details of a directory. + + :param directory_id: The ID of the directory to retrieve + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.GetDirectoryRequest( + directory_id=directory_id, + ) + + req = self._build_request( + method="GET", + path="/directories/{directory_id}", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="GetDirectory", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Directories"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.Directory, http_res) + if utils.match_response(http_res, ["401", "403", "404"], "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + async def get_async( + self, + *, + directory_id: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.Directory: + r"""Retrieve a directory + + Returns the details of a directory. + + :param directory_id: The ID of the directory to retrieve + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.GetDirectoryRequest( + directory_id=directory_id, + ) + + req = self._build_request_async( + method="GET", + path="/directories/{directory_id}", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="GetDirectory", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Directories"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.Directory, http_res) + if utils.match_response(http_res, ["401", "403", "404"], "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + def update( + self, + *, + directory_id: str, + name: Optional[str] = None, + enabled: Optional[bool] = None, + provider: Optional[str] = None, + attribute_mapping: Optional[Mapping[str, Nullable[str]]] = None, + group_role_mapping_enabled: Optional[bool] = None, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.Directory: + r"""Update a directory + + Updates a directory. + + :param directory_id: The ID of the directory to update + :param name: A human-friendly name for the directory. + :param enabled: Whether the directory is enabled. + :param provider: The identity provider for this directory. + :param attribute_mapping: Attribute-to-directory-path entries to merge into the directory's attribute mapping. + Set a key to `null` to remove it from the mapping. + :param group_role_mapping_enabled: Whether group-to-role mapping is enabled for this directory. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.UpdateDirectoryRequest( + directory_id=directory_id, + request_body=models.UpdateDirectoryRequestBody( + name=name, + enabled=enabled, + provider=provider, + attribute_mapping=utils.unmarshal( + attribute_mapping, Optional[Dict[str, Nullable[str]]] + ), + group_role_mapping_enabled=group_role_mapping_enabled, + ), + ) + + req = self._build_request( + method="PATCH", + path="/directories/{directory_id}", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request.request_body if request is not None else None, + False, + True, + "json", + Optional[models.UpdateDirectoryRequestBody], + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="UpdateDirectory", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Directories"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.Directory, http_res) + if utils.match_response( + http_res, ["400", "401", "403", "404", "422"], "application/json" + ): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + async def update_async( + self, + *, + directory_id: str, + name: Optional[str] = None, + enabled: Optional[bool] = None, + provider: Optional[str] = None, + attribute_mapping: Optional[Mapping[str, Nullable[str]]] = None, + group_role_mapping_enabled: Optional[bool] = None, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.Directory: + r"""Update a directory + + Updates a directory. + + :param directory_id: The ID of the directory to update + :param name: A human-friendly name for the directory. + :param enabled: Whether the directory is enabled. + :param provider: The identity provider for this directory. + :param attribute_mapping: Attribute-to-directory-path entries to merge into the directory's attribute mapping. + Set a key to `null` to remove it from the mapping. + :param group_role_mapping_enabled: Whether group-to-role mapping is enabled for this directory. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.UpdateDirectoryRequest( + directory_id=directory_id, + request_body=models.UpdateDirectoryRequestBody( + name=name, + enabled=enabled, + provider=provider, + attribute_mapping=utils.unmarshal( + attribute_mapping, Optional[Dict[str, Nullable[str]]] + ), + group_role_mapping_enabled=group_role_mapping_enabled, + ), + ) + + req = self._build_request_async( + method="PATCH", + path="/directories/{directory_id}", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request.request_body if request is not None else None, + False, + True, + "json", + Optional[models.UpdateDirectoryRequestBody], + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="UpdateDirectory", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Directories"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.Directory, http_res) + if utils.match_response( + http_res, ["400", "401", "403", "404", "422"], "application/json" + ): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + def delete( + self, + *, + directory_id: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.DeletedObject: + r"""Delete a directory + + Deletes a directory and stops provisioning for it. Provisioning requests authenticated + with the directory's API key are rejected afterwards. + + :param directory_id: The ID of the directory to delete + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.DeleteDirectoryRequest( + directory_id=directory_id, + ) + + req = self._build_request( + method="DELETE", + path="/directories/{directory_id}", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="DeleteDirectory", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Directories"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.DeletedObject, http_res) + if utils.match_response(http_res, ["401", "403", "404"], "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + async def delete_async( + self, + *, + directory_id: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.DeletedObject: + r"""Delete a directory + + Deletes a directory and stops provisioning for it. Provisioning requests authenticated + with the directory's API key are rejected afterwards. + + :param directory_id: The ID of the directory to delete + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.DeleteDirectoryRequest( + directory_id=directory_id, + ) + + req = self._build_request_async( + method="DELETE", + path="/directories/{directory_id}", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="DeleteDirectory", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Directories"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.DeletedObject, http_res) + if utils.match_response(http_res, ["401", "403", "404"], "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + def rotate_api_key( + self, + *, + directory_id: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.Directory: + r"""Rotate a directory's API key + + Generates a new API key for the directory and returns it in the `api_key` field. + This is the only way to obtain the key after creation, so make sure to update it in + your identity provider. The previous key remains valid for a short grace period before + it expires. + + :param directory_id: The ID of the directory whose API key to rotate + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.RotateDirectoryAPIKeyRequest( + directory_id=directory_id, + ) + + req = self._build_request( + method="POST", + path="/directories/{directory_id}/rotate_api_key", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="RotateDirectoryAPIKey", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Directories"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.Directory, http_res) + if utils.match_response( + http_res, ["401", "403", "404", "422"], "application/json" + ): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + async def rotate_api_key_async( + self, + *, + directory_id: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.Directory: + r"""Rotate a directory's API key + + Generates a new API key for the directory and returns it in the `api_key` field. + This is the only way to obtain the key after creation, so make sure to update it in + your identity provider. The previous key remains valid for a short grace period before + it expires. + + :param directory_id: The ID of the directory whose API key to rotate + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.RotateDirectoryAPIKeyRequest( + directory_id=directory_id, + ) + + req = self._build_request_async( + method="POST", + path="/directories/{directory_id}/rotate_api_key", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="RotateDirectoryAPIKey", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Directories"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.Directory, http_res) + if utils.match_response( + http_res, ["401", "403", "404", "422"], "application/json" + ): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + def list_group_role_mappings( + self, + *, + directory_id: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.DirectoryGroupRoleMappingList: + r"""List directory group role mappings + + Returns the list of directory group to organization role mappings for a directory, ordered by precedence. + + :param directory_id: The ID of the directory. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.ListDirectoryGroupRoleMappingsRequest( + directory_id=directory_id, + ) + + req = self._build_request( + method="GET", + path="/directories/{directory_id}/group_role_mappings", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="ListDirectoryGroupRoleMappings", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Directories"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response( + models.DirectoryGroupRoleMappingList, http_res + ) + if utils.match_response(http_res, ["401", "403", "404"], "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + async def list_group_role_mappings_async( + self, + *, + directory_id: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.DirectoryGroupRoleMappingList: + r"""List directory group role mappings + + Returns the list of directory group to organization role mappings for a directory, ordered by precedence. + + :param directory_id: The ID of the directory. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.ListDirectoryGroupRoleMappingsRequest( + directory_id=directory_id, + ) + + req = self._build_request_async( + method="GET", + path="/directories/{directory_id}/group_role_mappings", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="ListDirectoryGroupRoleMappings", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Directories"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response( + models.DirectoryGroupRoleMappingList, http_res + ) + if utils.match_response(http_res, ["401", "403", "404"], "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + def create_group_role_mapping( + self, + *, + directory_id: str, + role_id: str, + directory_group_id: Optional[str] = None, + scim_group_id: Optional[str] = None, + precedence: Optional[int] = None, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.DirectoryGroupRoleMapping: + r"""Create a directory group role mapping + + Creates a new directory group to organization role mapping for a directory. + Mappings can be created while group role mapping is disabled on the + directory, but they only take effect once it is enabled. + + :param directory_id: The ID of the directory. + :param role_id: The ID of the organization role to assign to members of the group. + :param directory_group_id: The group ID from the identity provider. Exactly one of `directory_group_id` or `scim_group_id` is required. + :param scim_group_id: The legacy name for `directory_group_id`. Send either one, or both with the same value; sending both with different values is rejected. + :param precedence: The precedence for this mapping. Lower values take priority when a user belongs + to multiple mapped groups. If omitted, the mapping is appended with the + next-highest precedence. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.CreateDirectoryGroupRoleMappingRequest( + directory_id=directory_id, + request_body=models.CreateDirectoryGroupRoleMappingRequestBody( + directory_group_id=directory_group_id, + scim_group_id=scim_group_id, + role_id=role_id, + precedence=precedence, + ), + ) + + req = self._build_request( + method="POST", + path="/directories/{directory_id}/group_role_mappings", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request.request_body, + False, + False, + "json", + models.CreateDirectoryGroupRoleMappingRequestBody, + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="CreateDirectoryGroupRoleMapping", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Directories"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.DirectoryGroupRoleMapping, http_res) + if utils.match_response( + http_res, ["400", "401", "403", "404", "422"], "application/json" + ): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + async def create_group_role_mapping_async( + self, + *, + directory_id: str, + role_id: str, + directory_group_id: Optional[str] = None, + scim_group_id: Optional[str] = None, + precedence: Optional[int] = None, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.DirectoryGroupRoleMapping: + r"""Create a directory group role mapping + + Creates a new directory group to organization role mapping for a directory. + Mappings can be created while group role mapping is disabled on the + directory, but they only take effect once it is enabled. + + :param directory_id: The ID of the directory. + :param role_id: The ID of the organization role to assign to members of the group. + :param directory_group_id: The group ID from the identity provider. Exactly one of `directory_group_id` or `scim_group_id` is required. + :param scim_group_id: The legacy name for `directory_group_id`. Send either one, or both with the same value; sending both with different values is rejected. + :param precedence: The precedence for this mapping. Lower values take priority when a user belongs + to multiple mapped groups. If omitted, the mapping is appended with the + next-highest precedence. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.CreateDirectoryGroupRoleMappingRequest( + directory_id=directory_id, + request_body=models.CreateDirectoryGroupRoleMappingRequestBody( + directory_group_id=directory_group_id, + scim_group_id=scim_group_id, + role_id=role_id, + precedence=precedence, + ), + ) + + req = self._build_request_async( + method="POST", + path="/directories/{directory_id}/group_role_mappings", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request.request_body, + False, + False, + "json", + models.CreateDirectoryGroupRoleMappingRequestBody, + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="CreateDirectoryGroupRoleMapping", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Directories"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.DirectoryGroupRoleMapping, http_res) + if utils.match_response( + http_res, ["400", "401", "403", "404", "422"], "application/json" + ): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + def replace_group_role_mappings( + self, + *, + directory_id: str, + mappings: Union[ + Iterable[models.ReplaceDirectoryGroupRoleMappingsMappings], + Iterable[models.ReplaceDirectoryGroupRoleMappingsMappingsTypedDict], + ], + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.DirectoryGroupRoleMappingList: + r"""Replace directory group role mappings + + Replaces the entire set of directory group role mappings for a directory. The position of + each item in the `mappings` array determines its precedence (the first item gets + precedence 1). Passing an empty array removes all mappings. Mappings can be replaced + while group role mapping is disabled on the directory, but they only take effect once + it is enabled. + + :param directory_id: The ID of the directory. + :param mappings: The desired set of mappings. Array order sets precedence (1-indexed). An empty array clears all mappings. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.ReplaceDirectoryGroupRoleMappingsRequest( + directory_id=directory_id, + request_body=models.ReplaceDirectoryGroupRoleMappingsRequestBody( + mappings=utils.get_pydantic_model( + mappings, List[models.ReplaceDirectoryGroupRoleMappingsMappings] + ), + ), + ) + + req = self._build_request( + method="PUT", + path="/directories/{directory_id}/group_role_mappings", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request.request_body, + False, + False, + "json", + models.ReplaceDirectoryGroupRoleMappingsRequestBody, + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="ReplaceDirectoryGroupRoleMappings", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Directories"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response( + models.DirectoryGroupRoleMappingList, http_res + ) + if utils.match_response( + http_res, ["400", "401", "403", "404", "422"], "application/json" + ): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + async def replace_group_role_mappings_async( + self, + *, + directory_id: str, + mappings: Union[ + Iterable[models.ReplaceDirectoryGroupRoleMappingsMappings], + Iterable[models.ReplaceDirectoryGroupRoleMappingsMappingsTypedDict], + ], + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.DirectoryGroupRoleMappingList: + r"""Replace directory group role mappings + + Replaces the entire set of directory group role mappings for a directory. The position of + each item in the `mappings` array determines its precedence (the first item gets + precedence 1). Passing an empty array removes all mappings. Mappings can be replaced + while group role mapping is disabled on the directory, but they only take effect once + it is enabled. + + :param directory_id: The ID of the directory. + :param mappings: The desired set of mappings. Array order sets precedence (1-indexed). An empty array clears all mappings. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.ReplaceDirectoryGroupRoleMappingsRequest( + directory_id=directory_id, + request_body=models.ReplaceDirectoryGroupRoleMappingsRequestBody( + mappings=utils.get_pydantic_model( + mappings, List[models.ReplaceDirectoryGroupRoleMappingsMappings] + ), + ), + ) + + req = self._build_request_async( + method="PUT", + path="/directories/{directory_id}/group_role_mappings", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request.request_body, + False, + False, + "json", + models.ReplaceDirectoryGroupRoleMappingsRequestBody, + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="ReplaceDirectoryGroupRoleMappings", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Directories"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response( + models.DirectoryGroupRoleMappingList, http_res + ) + if utils.match_response( + http_res, ["400", "401", "403", "404", "422"], "application/json" + ): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + def delete_group_role_mapping( + self, + *, + directory_id: str, + mapping_id: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.DirectoryGroupRoleMappingDeleted: + r"""Delete a directory group role mapping + + Deletes a single directory group role mapping. Mappings can be deleted while group role + mapping is disabled on the directory, but the change only takes effect once it is + enabled. + + :param directory_id: The ID of the directory. + :param mapping_id: The ID of the directory group role mapping to delete. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.DeleteDirectoryGroupRoleMappingRequest( + directory_id=directory_id, + mapping_id=mapping_id, + ) + + req = self._build_request( + method="DELETE", + path="/directories/{directory_id}/group_role_mappings/{mapping_id}", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="DeleteDirectoryGroupRoleMapping", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Directories"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response( + models.DirectoryGroupRoleMappingDeleted, http_res + ) + if utils.match_response( + http_res, ["400", "401", "403", "404"], "application/json" + ): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + async def delete_group_role_mapping_async( + self, + *, + directory_id: str, + mapping_id: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.DirectoryGroupRoleMappingDeleted: + r"""Delete a directory group role mapping + + Deletes a single directory group role mapping. Mappings can be deleted while group role + mapping is disabled on the directory, but the change only takes effect once it is + enabled. + + :param directory_id: The ID of the directory. + :param mapping_id: The ID of the directory group role mapping to delete. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.DeleteDirectoryGroupRoleMappingRequest( + directory_id=directory_id, + mapping_id=mapping_id, + ) + + req = self._build_request_async( + method="DELETE", + path="/directories/{directory_id}/group_role_mappings/{mapping_id}", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="DeleteDirectoryGroupRoleMapping", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Directories"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response( + models.DirectoryGroupRoleMappingDeleted, http_res + ) + if utils.match_response( + http_res, ["400", "401", "403", "404"], "application/json" + ): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) diff --git a/src/clerk_backend_api/models/__init__.py b/src/clerk_backend_api/models/__init__.py index d6fbed37..345d927a 100644 --- a/src/clerk_backend_api/models/__init__.py +++ b/src/clerk_backend_api/models/__init__.py @@ -45,6 +45,14 @@ AllowlistIdentifierTypedDict, IdentifierType, ) + from .applybillingsubscriptionitemdiscountop import ( + ApplyBillingSubscriptionItemDiscountRequest, + ApplyBillingSubscriptionItemDiscountRequestTypedDict, + ) + from .applycommercediscountrequest import ( + ApplyCommerceDiscountRequest, + ApplyCommerceDiscountRequestTypedDict, + ) from .assignpermissiontoorganizationroleop import ( AssignPermissionToOrganizationRoleRequest, AssignPermissionToOrganizationRoleRequestTypedDict, @@ -105,6 +113,18 @@ Groups, GroupsTypedDict, ) + from .biometriccredential import ( + BiometricCredential, + BiometricCredentialAlgorithm, + BiometricCredentialObject, + BiometricCredentialPlatform, + BiometricCredentialStatus, + BiometricCredentialTypedDict, + ) + from .biometriccredential_list import ( + BiometricCredentialList, + BiometricCredentialListTypedDict, + ) from .blocklistidentifier import ( BlocklistIdentifier, BlocklistIdentifierIdentifierType, @@ -137,6 +157,18 @@ CommerceCreditLedgerResponse, CommerceCreditLedgerResponseTypedDict, ) + from .commercediscountredemptionresponse import ( + AmountOff, + AmountOffTypedDict, + CommerceDiscountRedemptionResponse, + CommerceDiscountRedemptionResponseAmount, + CommerceDiscountRedemptionResponseAmountTypedDict, + CommerceDiscountRedemptionResponseObject, + CommerceDiscountRedemptionResponseStatus, + CommerceDiscountRedemptionResponseTypedDict, + Effect, + Source, + ) from .commercemoneyresponse import ( CommerceMoneyResponse, CommerceMoneyResponseTypedDict, @@ -434,6 +466,18 @@ CreateBulkWaitlistEntriesRequestBody, CreateBulkWaitlistEntriesRequestBodyTypedDict, ) + from .createdirectorygrouprolemappingop import ( + CreateDirectoryGroupRoleMappingRequest, + CreateDirectoryGroupRoleMappingRequestBody, + CreateDirectoryGroupRoleMappingRequestBodyTypedDict, + CreateDirectoryGroupRoleMappingRequestTypedDict, + ) + from .createdirectoryop import ( + CreateDirectoryGroupRoleMappings, + CreateDirectoryGroupRoleMappingsTypedDict, + CreateDirectoryRequestBody, + CreateDirectoryRequestBodyTypedDict, + ) from .createemailaddressop import ( CreateEmailAddressRequestBody, CreateEmailAddressRequestBodyTypedDict, @@ -645,6 +689,14 @@ DeleteBlocklistIdentifierRequest, DeleteBlocklistIdentifierRequestTypedDict, ) + from .deletedirectorygrouprolemappingop import ( + DeleteDirectoryGroupRoleMappingRequest, + DeleteDirectoryGroupRoleMappingRequestTypedDict, + ) + from .deletedirectoryop import ( + DeleteDirectoryRequest, + DeleteDirectoryRequestTypedDict, + ) from .deletedobject import DeletedObject, DeletedObjectTypedDict from .deletedomainop import DeleteDomainRequest, DeleteDomainRequestTypedDict from .deleteemailaddressop import ( @@ -731,12 +783,40 @@ DeleteWaitlistEntryRequest, DeleteWaitlistEntryRequestTypedDict, ) + from .directory import ( + Directory, + DirectoryCustomAttributes, + DirectoryCustomAttributesTypedDict, + DirectoryObject, + DirectoryTypedDict, + ) + from .directory_list import DirectoryList, DirectoryListTypedDict + from .directorygrouprolemapping import ( + DirectoryGroupRoleMapping, + DirectoryGroupRoleMappingObject, + DirectoryGroupRoleMappingTypedDict, + ) + from .directorygrouprolemapping_deleted import ( + DirectoryGroupRoleMappingDeleted, + DirectoryGroupRoleMappingDeletedObject, + DirectoryGroupRoleMappingDeletedTypedDict, + ) + from .directorygrouprolemapping_list import ( + DirectoryGroupRoleMappingList, + DirectoryGroupRoleMappingListTypedDict, + ) from .disablemfaop import ( DisableMFARequest, DisableMFARequestTypedDict, DisableMFAResponseBody, DisableMFAResponseBodyTypedDict, ) + from .dnstarget import ( + AutomationDisposition, + DNSTarget, + DNSTargetTypedDict, + RecordType, + ) from .domain import Domain, DomainObject, DomainTypedDict from .domains import Domains, DomainsTypedDict from .emailaddress import ( @@ -984,6 +1064,7 @@ GetCommerceSubscriptionItemListRequestTypedDict, QueryParamPayerType, ) + from .getdirectoryop import GetDirectoryRequest, GetDirectoryRequestTypedDict from .getemailaddressop import ( GetEmailAddressRequest, GetEmailAddressRequestTypedDict, @@ -1156,6 +1237,14 @@ ListAllowlistIdentifiersRequest, ListAllowlistIdentifiersRequestTypedDict, ) + from .listdirectoriesop import ( + ListDirectoriesRequest, + ListDirectoriesRequestTypedDict, + ) + from .listdirectorygrouprolemappingsop import ( + ListDirectoryGroupRoleMappingsRequest, + ListDirectoryGroupRoleMappingsRequestTypedDict, + ) from .listenterpriseconnectionsop import ( ListEnterpriseConnectionsRequest, ListEnterpriseConnectionsRequestTypedDict, @@ -1230,6 +1319,10 @@ ListSCIMGroupRoleMappingsRequest, ListSCIMGroupRoleMappingsRequestTypedDict, ) + from .listuserbiometriccredentialsop import ( + ListUserBiometricCredentialsRequest, + ListUserBiometricCredentialsRequestTypedDict, + ) from .listusertrusteddevicesop import ( ListUserTrustedDevicesRequest, ListUserTrustedDevicesRequestTypedDict, @@ -1451,6 +1544,10 @@ RejectWaitlistEntryRequest, RejectWaitlistEntryRequestTypedDict, ) + from .removebillingsubscriptionitemdiscountop import ( + RemoveBillingSubscriptionItemDiscountRequest, + RemoveBillingSubscriptionItemDiscountRequestTypedDict, + ) from .removepermissionfromorganizationroleop import ( RemovePermissionFromOrganizationRoleRequest, RemovePermissionFromOrganizationRoleRequestTypedDict, @@ -1461,6 +1558,14 @@ RemoveUserPasswordRequestBodyTypedDict, RemoveUserPasswordRequestTypedDict, ) + from .replacedirectorygrouprolemappingsop import ( + ReplaceDirectoryGroupRoleMappingsMappings, + ReplaceDirectoryGroupRoleMappingsMappingsTypedDict, + ReplaceDirectoryGroupRoleMappingsRequest, + ReplaceDirectoryGroupRoleMappingsRequestBody, + ReplaceDirectoryGroupRoleMappingsRequestBodyTypedDict, + ReplaceDirectoryGroupRoleMappingsRequestTypedDict, + ) from .replaceorganizationmetadataop import ( ReplaceOrganizationMetadataRequest, ReplaceOrganizationMetadataRequestBody, @@ -1601,6 +1706,10 @@ RevokeSignInTokenRequest, RevokeSignInTokenRequestTypedDict, ) + from .revokeuserbiometriccredentialop import ( + RevokeUserBiometricCredentialRequest, + RevokeUserBiometricCredentialRequestTypedDict, + ) from .revokeusertrusteddeviceop import ( RevokeUserTrustedDeviceRequest, RevokeUserTrustedDeviceRequestTypedDict, @@ -1624,6 +1733,10 @@ ) from .rolesetitem import RoleSetItem, RoleSetItemObject, RoleSetItemTypedDict from .rolesets import RoleSets, RoleSetsTypedDict + from .rotatedirectoryapikeyop import ( + RotateDirectoryAPIKeyRequest, + RotateDirectoryAPIKeyRequestTypedDict, + ) from .rotatemachinesecretkeyop import ( RotateMachineSecretKeyRequest, RotateMachineSecretKeyRequestBody, @@ -1808,6 +1921,12 @@ UpdateAPIKeyResponseBody, UpdateAPIKeyResponseBodyTypedDict, ) + from .updatedirectoryop import ( + UpdateDirectoryRequest, + UpdateDirectoryRequestBody, + UpdateDirectoryRequestBodyTypedDict, + UpdateDirectoryRequestTypedDict, + ) from .updatedomainop import ( UpdateDomainRequest, UpdateDomainRequestBody, @@ -2158,11 +2277,17 @@ "AllowlistIdentifierObject", "AllowlistIdentifierTypedDict", "Amount", + "AmountOff", + "AmountOffTypedDict", "AmountTypedDict", "AnnualFee", "AnnualFeeTypedDict", "AnnualMonthlyFee", "AnnualMonthlyFeeTypedDict", + "ApplyBillingSubscriptionItemDiscountRequest", + "ApplyBillingSubscriptionItemDiscountRequestTypedDict", + "ApplyCommerceDiscountRequest", + "ApplyCommerceDiscountRequestTypedDict", "AssignPermissionToOrganizationRoleRequest", "AssignPermissionToOrganizationRoleRequestTypedDict", "AttemptEmailAddressVerificationRequest", @@ -2175,6 +2300,7 @@ "AttemptPhoneNumberVerificationRequestTypedDict", "AttributeMapping", "AttributeMappingTypedDict", + "AutomationDisposition", "Balance", "BalanceTypedDict", "BanUserRequest", @@ -2209,6 +2335,14 @@ "BillingStatementTotals", "BillingStatementTotalsTypedDict", "BillingStatementTypedDict", + "BiometricCredential", + "BiometricCredentialAlgorithm", + "BiometricCredentialList", + "BiometricCredentialListTypedDict", + "BiometricCredentialObject", + "BiometricCredentialPlatform", + "BiometricCredentialStatus", + "BiometricCredentialTypedDict", "BlocklistIdentifier", "BlocklistIdentifierIdentifierType", "BlocklistIdentifierObject", @@ -2235,6 +2369,12 @@ "CommerceCreditBalanceResponseTypedDict", "CommerceCreditLedgerResponse", "CommerceCreditLedgerResponseTypedDict", + "CommerceDiscountRedemptionResponse", + "CommerceDiscountRedemptionResponseAmount", + "CommerceDiscountRedemptionResponseAmountTypedDict", + "CommerceDiscountRedemptionResponseObject", + "CommerceDiscountRedemptionResponseStatus", + "CommerceDiscountRedemptionResponseTypedDict", "CommerceMoneyResponse", "CommerceMoneyResponseTypedDict", "CommercePayerResponse", @@ -2434,6 +2574,14 @@ "CreateBulkInvitationsTemplateSlug", "CreateBulkWaitlistEntriesRequestBody", "CreateBulkWaitlistEntriesRequestBodyTypedDict", + "CreateDirectoryGroupRoleMappingRequest", + "CreateDirectoryGroupRoleMappingRequestBody", + "CreateDirectoryGroupRoleMappingRequestBodyTypedDict", + "CreateDirectoryGroupRoleMappingRequestTypedDict", + "CreateDirectoryGroupRoleMappings", + "CreateDirectoryGroupRoleMappingsTypedDict", + "CreateDirectoryRequestBody", + "CreateDirectoryRequestBodyTypedDict", "CreateEmailAddressRequestBody", "CreateEmailAddressRequestBodyTypedDict", "CreateEnterpriseConnectionAttributeMapping", @@ -2549,6 +2697,8 @@ "CreditsTypedDict", "CustomAttributes", "CustomAttributesTypedDict", + "DNSTarget", + "DNSTargetTypedDict", "Data", "DataTypedDict", "DefaultRole", @@ -2574,6 +2724,10 @@ "DeleteBackupCodeResponseBodyTypedDict", "DeleteBlocklistIdentifierRequest", "DeleteBlocklistIdentifierRequestTypedDict", + "DeleteDirectoryGroupRoleMappingRequest", + "DeleteDirectoryGroupRoleMappingRequestTypedDict", + "DeleteDirectoryRequest", + "DeleteDirectoryRequestTypedDict", "DeleteDomainRequest", "DeleteDomainRequestTypedDict", "DeleteEmailAddressRequest", @@ -2624,6 +2778,21 @@ "DeleteWaitlistEntryRequestTypedDict", "DeletedObject", "DeletedObjectTypedDict", + "Directory", + "DirectoryCustomAttributes", + "DirectoryCustomAttributesTypedDict", + "DirectoryGroupRoleMapping", + "DirectoryGroupRoleMappingDeleted", + "DirectoryGroupRoleMappingDeletedObject", + "DirectoryGroupRoleMappingDeletedTypedDict", + "DirectoryGroupRoleMappingList", + "DirectoryGroupRoleMappingListTypedDict", + "DirectoryGroupRoleMappingObject", + "DirectoryGroupRoleMappingTypedDict", + "DirectoryList", + "DirectoryListTypedDict", + "DirectoryObject", + "DirectoryTypedDict", "DisableMFARequest", "DisableMFARequestTypedDict", "DisableMFAResponseBody", @@ -2636,6 +2805,7 @@ "Domains", "DomainsEnrollmentModes", "DomainsTypedDict", + "Effect", "EffectiveMode", "EmailAddress", "EmailAddressIdentificationStatus", @@ -2757,6 +2927,8 @@ "GetCommerceSubscriptionItemListQueryParamStatus", "GetCommerceSubscriptionItemListRequest", "GetCommerceSubscriptionItemListRequestTypedDict", + "GetDirectoryRequest", + "GetDirectoryRequestTypedDict", "GetEmailAddressRequest", "GetEmailAddressRequestTypedDict", "GetEnterpriseConnectionRequest", @@ -2887,6 +3059,10 @@ "ListAllOrganizationDomainsRequestTypedDict", "ListAllowlistIdentifiersRequest", "ListAllowlistIdentifiersRequestTypedDict", + "ListDirectoriesRequest", + "ListDirectoriesRequestTypedDict", + "ListDirectoryGroupRoleMappingsRequest", + "ListDirectoryGroupRoleMappingsRequestTypedDict", "ListEnterpriseConnectionTestRunsQueryParamStatus", "ListEnterpriseConnectionTestRunsRequest", "ListEnterpriseConnectionTestRunsRequestTypedDict", @@ -2929,6 +3105,8 @@ "ListSCIMDirectoriesRequestTypedDict", "ListSCIMGroupRoleMappingsRequest", "ListSCIMGroupRoleMappingsRequestTypedDict", + "ListUserBiometricCredentialsRequest", + "ListUserBiometricCredentialsRequestTypedDict", "ListUserTrustedDevicesRequest", "ListUserTrustedDevicesRequestTypedDict", "ListWaitlistEntriesQueryParamStatus", @@ -3118,6 +3296,7 @@ "QueryParamEnrollmentMode", "QueryParamPayerType", "QueryParamStatus", + "RecordType", "RedirectURL", "RedirectURLObject", "RedirectURLTypedDict", @@ -3127,12 +3306,20 @@ "RefreshSessionRequestTypedDict", "RejectWaitlistEntryRequest", "RejectWaitlistEntryRequestTypedDict", + "RemoveBillingSubscriptionItemDiscountRequest", + "RemoveBillingSubscriptionItemDiscountRequestTypedDict", "RemovePermissionFromOrganizationRoleRequest", "RemovePermissionFromOrganizationRoleRequestTypedDict", "RemoveUserPasswordRequest", "RemoveUserPasswordRequestBody", "RemoveUserPasswordRequestBodyTypedDict", "RemoveUserPasswordRequestTypedDict", + "ReplaceDirectoryGroupRoleMappingsMappings", + "ReplaceDirectoryGroupRoleMappingsMappingsTypedDict", + "ReplaceDirectoryGroupRoleMappingsRequest", + "ReplaceDirectoryGroupRoleMappingsRequestBody", + "ReplaceDirectoryGroupRoleMappingsRequestBodyTypedDict", + "ReplaceDirectoryGroupRoleMappingsRequestTypedDict", "ReplaceOrganizationMetadataRequest", "ReplaceOrganizationMetadataRequestBody", "ReplaceOrganizationMetadataRequestBodyTypedDict", @@ -3254,6 +3441,8 @@ "RevokeSessionRequestTypedDict", "RevokeSignInTokenRequest", "RevokeSignInTokenRequestTypedDict", + "RevokeUserBiometricCredentialRequest", + "RevokeUserBiometricCredentialRequestTypedDict", "RevokeUserTrustedDeviceRequest", "RevokeUserTrustedDeviceRequestTypedDict", "Role", @@ -3274,6 +3463,8 @@ "RoleTypedDict", "Roles", "RolesTypedDict", + "RotateDirectoryAPIKeyRequest", + "RotateDirectoryAPIKeyRequestTypedDict", "RotateMachineSecretKeyRequest", "RotateMachineSecretKeyRequestBody", "RotateMachineSecretKeyRequestBodyTypedDict", @@ -3360,6 +3551,7 @@ "SignUpVerificationTypedDict", "SignUpVerifications", "SignUpVerificationsTypedDict", + "Source", "Status", "Strategy", "SubscriptionItem", @@ -3421,6 +3613,10 @@ "UpdateAPIKeyRequestTypedDict", "UpdateAPIKeyResponseBody", "UpdateAPIKeyResponseBodyTypedDict", + "UpdateDirectoryRequest", + "UpdateDirectoryRequestBody", + "UpdateDirectoryRequestBodyTypedDict", + "UpdateDirectoryRequestTypedDict", "UpdateDomainRequest", "UpdateDomainRequestBody", "UpdateDomainRequestBodyTypedDict", @@ -3773,6 +3969,10 @@ "AllowlistIdentifierObject": ".allowlistidentifier", "AllowlistIdentifierTypedDict": ".allowlistidentifier", "IdentifierType": ".allowlistidentifier", + "ApplyBillingSubscriptionItemDiscountRequest": ".applybillingsubscriptionitemdiscountop", + "ApplyBillingSubscriptionItemDiscountRequestTypedDict": ".applybillingsubscriptionitemdiscountop", + "ApplyCommerceDiscountRequest": ".applycommercediscountrequest", + "ApplyCommerceDiscountRequestTypedDict": ".applycommercediscountrequest", "AssignPermissionToOrganizationRoleRequest": ".assignpermissiontoorganizationroleop", "AssignPermissionToOrganizationRoleRequestTypedDict": ".assignpermissiontoorganizationroleop", "AttemptEmailAddressVerificationRequest": ".attemptemailaddressverificationop", @@ -3822,6 +4022,14 @@ "BillingStatementTypedDict": ".billingstatement", "Groups": ".billingstatement", "GroupsTypedDict": ".billingstatement", + "BiometricCredential": ".biometriccredential", + "BiometricCredentialAlgorithm": ".biometriccredential", + "BiometricCredentialObject": ".biometriccredential", + "BiometricCredentialPlatform": ".biometriccredential", + "BiometricCredentialStatus": ".biometriccredential", + "BiometricCredentialTypedDict": ".biometriccredential", + "BiometricCredentialList": ".biometriccredential_list", + "BiometricCredentialListTypedDict": ".biometriccredential_list", "BlocklistIdentifier": ".blocklistidentifier", "BlocklistIdentifierIdentifierType": ".blocklistidentifier", "BlocklistIdentifierObject": ".blocklistidentifier", @@ -3847,6 +4055,16 @@ "CommerceCreditBalanceResponseTypedDict": ".commercecreditbalanceresponse", "CommerceCreditLedgerResponse": ".commercecreditledgerresponse", "CommerceCreditLedgerResponseTypedDict": ".commercecreditledgerresponse", + "AmountOff": ".commercediscountredemptionresponse", + "AmountOffTypedDict": ".commercediscountredemptionresponse", + "CommerceDiscountRedemptionResponse": ".commercediscountredemptionresponse", + "CommerceDiscountRedemptionResponseAmount": ".commercediscountredemptionresponse", + "CommerceDiscountRedemptionResponseAmountTypedDict": ".commercediscountredemptionresponse", + "CommerceDiscountRedemptionResponseObject": ".commercediscountredemptionresponse", + "CommerceDiscountRedemptionResponseStatus": ".commercediscountredemptionresponse", + "CommerceDiscountRedemptionResponseTypedDict": ".commercediscountredemptionresponse", + "Effect": ".commercediscountredemptionresponse", + "Source": ".commercediscountredemptionresponse", "CommerceMoneyResponse": ".commercemoneyresponse", "CommerceMoneyResponseTypedDict": ".commercemoneyresponse", "CommercePayerResponse": ".commercepayerresponse", @@ -4090,6 +4308,14 @@ "RequestBodyTypedDict": ".createbulkinvitationsop", "CreateBulkWaitlistEntriesRequestBody": ".createbulkwaitlistentriesop", "CreateBulkWaitlistEntriesRequestBodyTypedDict": ".createbulkwaitlistentriesop", + "CreateDirectoryGroupRoleMappingRequest": ".createdirectorygrouprolemappingop", + "CreateDirectoryGroupRoleMappingRequestBody": ".createdirectorygrouprolemappingop", + "CreateDirectoryGroupRoleMappingRequestBodyTypedDict": ".createdirectorygrouprolemappingop", + "CreateDirectoryGroupRoleMappingRequestTypedDict": ".createdirectorygrouprolemappingop", + "CreateDirectoryGroupRoleMappings": ".createdirectoryop", + "CreateDirectoryGroupRoleMappingsTypedDict": ".createdirectoryop", + "CreateDirectoryRequestBody": ".createdirectoryop", + "CreateDirectoryRequestBodyTypedDict": ".createdirectoryop", "CreateEmailAddressRequestBody": ".createemailaddressop", "CreateEmailAddressRequestBodyTypedDict": ".createemailaddressop", "CreateEnterpriseConnectionAttributeMapping": ".createenterpriseconnectionop", @@ -4237,6 +4463,10 @@ "DeleteBackupCodeResponseBodyTypedDict": ".deletebackupcodeop", "DeleteBlocklistIdentifierRequest": ".deleteblocklistidentifierop", "DeleteBlocklistIdentifierRequestTypedDict": ".deleteblocklistidentifierop", + "DeleteDirectoryGroupRoleMappingRequest": ".deletedirectorygrouprolemappingop", + "DeleteDirectoryGroupRoleMappingRequestTypedDict": ".deletedirectorygrouprolemappingop", + "DeleteDirectoryRequest": ".deletedirectoryop", + "DeleteDirectoryRequestTypedDict": ".deletedirectoryop", "DeletedObject": ".deletedobject", "DeletedObjectTypedDict": ".deletedobject", "DeleteDomainRequest": ".deletedomainop", @@ -4287,10 +4517,29 @@ "DeleteUserProfileImageRequestTypedDict": ".deleteuserprofileimageop", "DeleteWaitlistEntryRequest": ".deletewaitlistentryop", "DeleteWaitlistEntryRequestTypedDict": ".deletewaitlistentryop", + "Directory": ".directory", + "DirectoryCustomAttributes": ".directory", + "DirectoryCustomAttributesTypedDict": ".directory", + "DirectoryObject": ".directory", + "DirectoryTypedDict": ".directory", + "DirectoryList": ".directory_list", + "DirectoryListTypedDict": ".directory_list", + "DirectoryGroupRoleMapping": ".directorygrouprolemapping", + "DirectoryGroupRoleMappingObject": ".directorygrouprolemapping", + "DirectoryGroupRoleMappingTypedDict": ".directorygrouprolemapping", + "DirectoryGroupRoleMappingDeleted": ".directorygrouprolemapping_deleted", + "DirectoryGroupRoleMappingDeletedObject": ".directorygrouprolemapping_deleted", + "DirectoryGroupRoleMappingDeletedTypedDict": ".directorygrouprolemapping_deleted", + "DirectoryGroupRoleMappingList": ".directorygrouprolemapping_list", + "DirectoryGroupRoleMappingListTypedDict": ".directorygrouprolemapping_list", "DisableMFARequest": ".disablemfaop", "DisableMFARequestTypedDict": ".disablemfaop", "DisableMFAResponseBody": ".disablemfaop", "DisableMFAResponseBodyTypedDict": ".disablemfaop", + "AutomationDisposition": ".dnstarget", + "DNSTarget": ".dnstarget", + "DNSTargetTypedDict": ".dnstarget", + "RecordType": ".dnstarget", "Domain": ".domain", "DomainObject": ".domain", "DomainTypedDict": ".domain", @@ -4501,6 +4750,8 @@ "GetCommerceSubscriptionItemListRequest": ".getcommercesubscriptionitemlistop", "GetCommerceSubscriptionItemListRequestTypedDict": ".getcommercesubscriptionitemlistop", "QueryParamPayerType": ".getcommercesubscriptionitemlistop", + "GetDirectoryRequest": ".getdirectoryop", + "GetDirectoryRequestTypedDict": ".getdirectoryop", "GetEmailAddressRequest": ".getemailaddressop", "GetEmailAddressRequestTypedDict": ".getemailaddressop", "GetEnterpriseConnectionRequest": ".getenterpriseconnectionop", @@ -4627,6 +4878,10 @@ "Verified": ".listallorganizationdomainsop", "ListAllowlistIdentifiersRequest": ".listallowlistidentifiersop", "ListAllowlistIdentifiersRequestTypedDict": ".listallowlistidentifiersop", + "ListDirectoriesRequest": ".listdirectoriesop", + "ListDirectoriesRequestTypedDict": ".listdirectoriesop", + "ListDirectoryGroupRoleMappingsRequest": ".listdirectorygrouprolemappingsop", + "ListDirectoryGroupRoleMappingsRequestTypedDict": ".listdirectorygrouprolemappingsop", "ListEnterpriseConnectionsRequest": ".listenterpriseconnectionsop", "ListEnterpriseConnectionsRequestTypedDict": ".listenterpriseconnectionsop", "ListEnterpriseConnectionTestRunsQueryParamStatus": ".listenterpriseconnectiontestrunsop", @@ -4669,6 +4924,8 @@ "ListSCIMDirectoriesRequestTypedDict": ".listscimdirectoriesop", "ListSCIMGroupRoleMappingsRequest": ".listscimgrouprolemappingsop", "ListSCIMGroupRoleMappingsRequestTypedDict": ".listscimgrouprolemappingsop", + "ListUserBiometricCredentialsRequest": ".listuserbiometriccredentialsop", + "ListUserBiometricCredentialsRequestTypedDict": ".listuserbiometriccredentialsop", "ListUserTrustedDevicesRequest": ".listusertrusteddevicesop", "ListUserTrustedDevicesRequestTypedDict": ".listusertrusteddevicesop", "ListWaitlistEntriesQueryParamStatus": ".listwaitlistentriesop", @@ -4834,12 +5091,20 @@ "RefreshSessionRequestTypedDict": ".refreshsessionop", "RejectWaitlistEntryRequest": ".rejectwaitlistentryop", "RejectWaitlistEntryRequestTypedDict": ".rejectwaitlistentryop", + "RemoveBillingSubscriptionItemDiscountRequest": ".removebillingsubscriptionitemdiscountop", + "RemoveBillingSubscriptionItemDiscountRequestTypedDict": ".removebillingsubscriptionitemdiscountop", "RemovePermissionFromOrganizationRoleRequest": ".removepermissionfromorganizationroleop", "RemovePermissionFromOrganizationRoleRequestTypedDict": ".removepermissionfromorganizationroleop", "RemoveUserPasswordRequest": ".removeuserpasswordop", "RemoveUserPasswordRequestBody": ".removeuserpasswordop", "RemoveUserPasswordRequestBodyTypedDict": ".removeuserpasswordop", "RemoveUserPasswordRequestTypedDict": ".removeuserpasswordop", + "ReplaceDirectoryGroupRoleMappingsMappings": ".replacedirectorygrouprolemappingsop", + "ReplaceDirectoryGroupRoleMappingsMappingsTypedDict": ".replacedirectorygrouprolemappingsop", + "ReplaceDirectoryGroupRoleMappingsRequest": ".replacedirectorygrouprolemappingsop", + "ReplaceDirectoryGroupRoleMappingsRequestBody": ".replacedirectorygrouprolemappingsop", + "ReplaceDirectoryGroupRoleMappingsRequestBodyTypedDict": ".replacedirectorygrouprolemappingsop", + "ReplaceDirectoryGroupRoleMappingsRequestTypedDict": ".replacedirectorygrouprolemappingsop", "ReplaceOrganizationMetadataRequest": ".replaceorganizationmetadataop", "ReplaceOrganizationMetadataRequestBody": ".replaceorganizationmetadataop", "ReplaceOrganizationMetadataRequestBodyTypedDict": ".replaceorganizationmetadataop", @@ -4947,6 +5212,8 @@ "RevokeSessionRequestTypedDict": ".revokesessionop", "RevokeSignInTokenRequest": ".revokesignintokenop", "RevokeSignInTokenRequestTypedDict": ".revokesignintokenop", + "RevokeUserBiometricCredentialRequest": ".revokeuserbiometriccredentialop", + "RevokeUserBiometricCredentialRequestTypedDict": ".revokeuserbiometriccredentialop", "RevokeUserTrustedDeviceRequest": ".revokeusertrusteddeviceop", "RevokeUserTrustedDeviceRequestTypedDict": ".revokeusertrusteddeviceop", "Role": ".role", @@ -4972,6 +5239,8 @@ "RoleSetItemTypedDict": ".rolesetitem", "RoleSets": ".rolesets", "RoleSetsTypedDict": ".rolesets", + "RotateDirectoryAPIKeyRequest": ".rotatedirectoryapikeyop", + "RotateDirectoryAPIKeyRequestTypedDict": ".rotatedirectoryapikeyop", "RotateMachineSecretKeyRequest": ".rotatemachinesecretkeyop", "RotateMachineSecretKeyRequestBody": ".rotatemachinesecretkeyop", "RotateMachineSecretKeyRequestBodyTypedDict": ".rotatemachinesecretkeyop", @@ -5127,6 +5396,10 @@ "UpdateAPIKeyRequestTypedDict": ".updateapikeyop", "UpdateAPIKeyResponseBody": ".updateapikeyop", "UpdateAPIKeyResponseBodyTypedDict": ".updateapikeyop", + "UpdateDirectoryRequest": ".updatedirectoryop", + "UpdateDirectoryRequestBody": ".updatedirectoryop", + "UpdateDirectoryRequestBodyTypedDict": ".updatedirectoryop", + "UpdateDirectoryRequestTypedDict": ".updatedirectoryop", "UpdateDomainRequest": ".updatedomainop", "UpdateDomainRequestBody": ".updatedomainop", "UpdateDomainRequestBodyTypedDict": ".updatedomainop", diff --git a/src/clerk_backend_api/models/applybillingsubscriptionitemdiscountop.py b/src/clerk_backend_api/models/applybillingsubscriptionitemdiscountop.py new file mode 100644 index 00000000..5c01ab90 --- /dev/null +++ b/src/clerk_backend_api/models/applybillingsubscriptionitemdiscountop.py @@ -0,0 +1,30 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .applycommercediscountrequest import ( + ApplyCommerceDiscountRequest, + ApplyCommerceDiscountRequestTypedDict, +) +from clerk_backend_api.types import BaseModel +from clerk_backend_api.utils import FieldMetadata, PathParamMetadata, RequestMetadata +from typing_extensions import Annotated, TypedDict + + +class ApplyBillingSubscriptionItemDiscountRequestTypedDict(TypedDict): + subscription_item_id: str + r"""The ID of the subscription item to apply the discount to""" + apply_commerce_discount_request: ApplyCommerceDiscountRequestTypedDict + r"""Parameters for applying the discount""" + + +class ApplyBillingSubscriptionItemDiscountRequest(BaseModel): + subscription_item_id: Annotated[ + str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) + ] + r"""The ID of the subscription item to apply the discount to""" + + apply_commerce_discount_request: Annotated[ + ApplyCommerceDiscountRequest, + FieldMetadata(request=RequestMetadata(media_type="application/json")), + ] + r"""Parameters for applying the discount""" diff --git a/src/clerk_backend_api/models/applycommercediscountrequest.py b/src/clerk_backend_api/models/applycommercediscountrequest.py new file mode 100644 index 00000000..9fb4d4d5 --- /dev/null +++ b/src/clerk_backend_api/models/applycommercediscountrequest.py @@ -0,0 +1,15 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import BaseModel +from typing_extensions import TypedDict + + +class ApplyCommerceDiscountRequestTypedDict(TypedDict): + discount_id: str + r"""The ID of the discount to apply to the subscription item.""" + + +class ApplyCommerceDiscountRequest(BaseModel): + discount_id: str + r"""The ID of the discount to apply to the subscription item.""" diff --git a/src/clerk_backend_api/models/biometriccredential.py b/src/clerk_backend_api/models/biometriccredential.py new file mode 100644 index 00000000..62d218ba --- /dev/null +++ b/src/clerk_backend_api/models/biometriccredential.py @@ -0,0 +1,106 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import ( + BaseModel, + Nullable, + OptionalNullable, + UNSET, + UNSET_SENTINEL, +) +from enum import Enum +from pydantic import model_serializer +from typing_extensions import NotRequired, TypedDict + + +class BiometricCredentialObject(str, Enum): + r"""String representing the object's type.""" + + TRUSTED_DEVICE = "trusted_device" + + +class BiometricCredentialPlatform(str, Enum): + IOS = "ios" + ANDROID = "android" + + +class BiometricCredentialAlgorithm(str, Enum): + ES256 = "ES256" + + +class BiometricCredentialStatus(str, Enum): + ACTIVE = "active" + REVOKED = "revoked" + + +class BiometricCredentialTypedDict(TypedDict): + object: BiometricCredentialObject + r"""String representing the object's type.""" + id: str + platform: BiometricCredentialPlatform + app_identifier: str + algorithm: BiometricCredentialAlgorithm + status: BiometricCredentialStatus + created_at: int + r"""Unix timestamp of creation in milliseconds.""" + updated_at: int + r"""Unix timestamp of the last update in milliseconds.""" + name: NotRequired[Nullable[str]] + last_used_at: NotRequired[Nullable[int]] + r"""Unix timestamp of the last use in milliseconds.""" + revoked_at: NotRequired[Nullable[int]] + r"""Unix timestamp of revocation in milliseconds.""" + + +class BiometricCredential(BaseModel): + object: BiometricCredentialObject + r"""String representing the object's type.""" + + id: str + + platform: BiometricCredentialPlatform + + app_identifier: str + + algorithm: BiometricCredentialAlgorithm + + status: BiometricCredentialStatus + + created_at: int + r"""Unix timestamp of creation in milliseconds.""" + + updated_at: int + r"""Unix timestamp of the last update in milliseconds.""" + + name: OptionalNullable[str] = UNSET + + last_used_at: OptionalNullable[int] = UNSET + r"""Unix timestamp of the last use in milliseconds.""" + + revoked_at: OptionalNullable[int] = UNSET + r"""Unix timestamp of revocation in milliseconds.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["name", "last_used_at", "revoked_at"]) + nullable_fields = set(["name", "last_used_at", "revoked_at"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + is_nullable_and_explicitly_set = ( + k in nullable_fields + and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member + ) + + if val != UNSET_SENTINEL: + if ( + val is not None + or k not in optional_fields + or is_nullable_and_explicitly_set + ): + m[k] = val + + return m diff --git a/src/clerk_backend_api/models/biometriccredential_list.py b/src/clerk_backend_api/models/biometriccredential_list.py new file mode 100644 index 00000000..0298f8e1 --- /dev/null +++ b/src/clerk_backend_api/models/biometriccredential_list.py @@ -0,0 +1,24 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .biometriccredential import BiometricCredential, BiometricCredentialTypedDict +from clerk_backend_api.types import BaseModel +from typing import List +from typing_extensions import TypedDict + + +class BiometricCredentialListTypedDict(TypedDict): + r"""Success""" + + data: List[BiometricCredentialTypedDict] + total_count: int + r"""Total number of biometric credentials""" + + +class BiometricCredentialList(BaseModel): + r"""Success""" + + data: List[BiometricCredential] + + total_count: int + r"""Total number of biometric credentials""" diff --git a/src/clerk_backend_api/models/commercediscountredemptionresponse.py b/src/clerk_backend_api/models/commercediscountredemptionresponse.py new file mode 100644 index 00000000..aafd2c24 --- /dev/null +++ b/src/clerk_backend_api/models/commercediscountredemptionresponse.py @@ -0,0 +1,235 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import ( + BaseModel, + Nullable, + OptionalNullable, + UNSET, + UNSET_SENTINEL, +) +from enum import Enum +from pydantic import model_serializer +from typing import Optional +from typing_extensions import NotRequired, TypedDict + + +class CommerceDiscountRedemptionResponseObject(str, Enum): + r"""String representing the object's type. Objects of the same type share the same value.""" + + COMMERCE_DISCOUNT_REDEMPTION = "commerce_discount_redemption" + + +class Source(str, Enum): + r"""How the discount was applied to the subscription item.""" + + PROMOTION = "promotion" + MANUAL = "manual" + PROMO_CODE = "promo_code" + + +class Effect(str, Enum): + r"""The snapshotted discount effect.""" + + PERCENTAGE = "percentage" + FIXED_AMOUNT = "fixed_amount" + + +class AmountOffTypedDict(TypedDict): + r"""Fixed amount off when the effect is fixed_amount.""" + + amount: int + r"""The amount in cents.""" + amount_formatted: str + r"""The formatted amount as a string (e.g., \"$49.99\").""" + currency: str + r"""The currency code (e.g., \"USD\").""" + currency_symbol: str + r"""The currency symbol (e.g., \"$\").""" + + +class AmountOff(BaseModel): + r"""Fixed amount off when the effect is fixed_amount.""" + + amount: int + r"""The amount in cents.""" + + amount_formatted: str + r"""The formatted amount as a string (e.g., \"$49.99\").""" + + currency: str + r"""The currency code (e.g., \"USD\").""" + + currency_symbol: str + r"""The currency symbol (e.g., \"$\").""" + + +class CommerceDiscountRedemptionResponseAmountTypedDict(TypedDict): + r"""How much this discount takes off the subscription item's next renewal charge. + Present for either effect when next-payment data is available. + """ + + amount: int + r"""The amount in cents.""" + amount_formatted: str + r"""The formatted amount as a string (e.g., \"$49.99\").""" + currency: str + r"""The currency code (e.g., \"USD\").""" + currency_symbol: str + r"""The currency symbol (e.g., \"$\").""" + + +class CommerceDiscountRedemptionResponseAmount(BaseModel): + r"""How much this discount takes off the subscription item's next renewal charge. + Present for either effect when next-payment data is available. + """ + + amount: int + r"""The amount in cents.""" + + amount_formatted: str + r"""The formatted amount as a string (e.g., \"$49.99\").""" + + currency: str + r"""The currency code (e.g., \"USD\").""" + + currency_symbol: str + r"""The currency symbol (e.g., \"$\").""" + + +class CommerceDiscountRedemptionResponseStatus(str, Enum): + r"""Current status of the discount redemption.""" + + ACTIVE = "active" + EXHAUSTED = "exhausted" + REMOVED = "removed" + + +class CommerceDiscountRedemptionResponseTypedDict(TypedDict): + r"""A commerce discount redemption.""" + + object: CommerceDiscountRedemptionResponseObject + r"""String representing the object's type. Objects of the same type share the same value.""" + id: str + r"""Unique identifier for the discount redemption.""" + subscription_item_id: str + r"""Unique identifier for the subscription item the discount was applied to.""" + discount_id: str + r"""Unique identifier for the discount that was applied.""" + source: Source + r"""How the discount was applied to the subscription item.""" + cycles_remaining: Nullable[int] + r"""Remaining billing cycles the discount applies to. Null means the discount lasts forever.""" + cycles_applied: int + r"""Number of billing cycles the discount has already been applied to.""" + redeemed_at: int + r"""Unix timestamp (in milliseconds) when the discount was redeemed.""" + redeemed_by: Nullable[str] + r"""Identifier of the actor that redeemed the discount, when available.""" + name: NotRequired[str] + r"""The display name of the discount.""" + promo_code: NotRequired[str] + r"""The promo code used to redeem the discount, when applicable.""" + effect: NotRequired[Effect] + r"""The snapshotted discount effect.""" + percent_off: NotRequired[Nullable[float]] + r"""Percent off when the effect is percentage.""" + amount_off: NotRequired[Nullable[AmountOffTypedDict]] + r"""Fixed amount off when the effect is fixed_amount.""" + amount: NotRequired[Nullable[CommerceDiscountRedemptionResponseAmountTypedDict]] + r"""How much this discount takes off the subscription item's next renewal charge. + Present for either effect when next-payment data is available. + """ + status: NotRequired[CommerceDiscountRedemptionResponseStatus] + r"""Current status of the discount redemption.""" + + +class CommerceDiscountRedemptionResponse(BaseModel): + r"""A commerce discount redemption.""" + + object: CommerceDiscountRedemptionResponseObject + r"""String representing the object's type. Objects of the same type share the same value.""" + + id: str + r"""Unique identifier for the discount redemption.""" + + subscription_item_id: str + r"""Unique identifier for the subscription item the discount was applied to.""" + + discount_id: str + r"""Unique identifier for the discount that was applied.""" + + source: Source + r"""How the discount was applied to the subscription item.""" + + cycles_remaining: Nullable[int] + r"""Remaining billing cycles the discount applies to. Null means the discount lasts forever.""" + + cycles_applied: int + r"""Number of billing cycles the discount has already been applied to.""" + + redeemed_at: int + r"""Unix timestamp (in milliseconds) when the discount was redeemed.""" + + redeemed_by: Nullable[str] + r"""Identifier of the actor that redeemed the discount, when available.""" + + name: Optional[str] = None + r"""The display name of the discount.""" + + promo_code: Optional[str] = None + r"""The promo code used to redeem the discount, when applicable.""" + + effect: Optional[Effect] = None + r"""The snapshotted discount effect.""" + + percent_off: OptionalNullable[float] = UNSET + r"""Percent off when the effect is percentage.""" + + amount_off: OptionalNullable[AmountOff] = UNSET + r"""Fixed amount off when the effect is fixed_amount.""" + + amount: OptionalNullable[CommerceDiscountRedemptionResponseAmount] = UNSET + r"""How much this discount takes off the subscription item's next renewal charge. + Present for either effect when next-payment data is available. + """ + + status: Optional[CommerceDiscountRedemptionResponseStatus] = None + r"""Current status of the discount redemption.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set( + [ + "name", + "promo_code", + "effect", + "percent_off", + "amount_off", + "amount", + "status", + ] + ) + nullable_fields = set( + ["percent_off", "amount_off", "amount", "cycles_remaining", "redeemed_by"] + ) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + is_nullable_and_explicitly_set = ( + k in nullable_fields + and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member + ) + + if val != UNSET_SENTINEL: + if ( + val is not None + or k not in optional_fields + or is_nullable_and_explicitly_set + ): + m[k] = val + + return m diff --git a/src/clerk_backend_api/models/createbillingpricerequest.py b/src/clerk_backend_api/models/createbillingpricerequest.py index 84a19d0e..94be7281 100644 --- a/src/clerk_backend_api/models/createbillingpricerequest.py +++ b/src/clerk_backend_api/models/createbillingpricerequest.py @@ -26,11 +26,11 @@ class CreateBillingPriceRequestTypedDict(TypedDict): plan_id: str r"""The ID of the plan this price belongs to.""" amount: Nullable[int] - r"""The monthly amount in cents. Must be at least $1 (100 cents) if not null.""" + r"""The monthly amount in cents. Use `0` for a complimentary price. Positive amounts must be at least $1 (100 cents).""" currency: NotRequired[str] r"""The currency code (e.g., \"USD\"). Defaults to USD.""" annual_monthly_amount: NotRequired[Nullable[int]] - r"""The monthly amount in cents when billed annually. Must be at least $1 (100 cents) if not null.""" + r"""The monthly amount in cents when billed annually. Use `0` for a complimentary price. Positive amounts must be at least $1 (100 cents).""" description: NotRequired[str] r"""An optional description for this custom price.""" supported_billing_periods: NotRequired[ @@ -44,13 +44,13 @@ class CreateBillingPriceRequest(BaseModel): r"""The ID of the plan this price belongs to.""" amount: Nullable[int] - r"""The monthly amount in cents. Must be at least $1 (100 cents) if not null.""" + r"""The monthly amount in cents. Use `0` for a complimentary price. Positive amounts must be at least $1 (100 cents).""" currency: Optional[str] = "USD" r"""The currency code (e.g., \"USD\"). Defaults to USD.""" annual_monthly_amount: OptionalNullable[int] = UNSET - r"""The monthly amount in cents when billed annually. Must be at least $1 (100 cents) if not null.""" + r"""The monthly amount in cents when billed annually. Use `0` for a complimentary price. Positive amounts must be at least $1 (100 cents).""" description: Optional[str] = None r"""An optional description for this custom price.""" diff --git a/src/clerk_backend_api/models/createdirectorygrouprolemappingop.py b/src/clerk_backend_api/models/createdirectorygrouprolemappingop.py new file mode 100644 index 00000000..33e6b85f --- /dev/null +++ b/src/clerk_backend_api/models/createdirectorygrouprolemappingop.py @@ -0,0 +1,73 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import BaseModel, UNSET_SENTINEL +from clerk_backend_api.utils import FieldMetadata, PathParamMetadata, RequestMetadata +from pydantic import model_serializer +from typing import Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +class CreateDirectoryGroupRoleMappingRequestBodyTypedDict(TypedDict): + role_id: str + r"""The ID of the organization role to assign to members of the group.""" + directory_group_id: NotRequired[str] + r"""The group ID from the identity provider. Exactly one of `directory_group_id` or `scim_group_id` is required.""" + scim_group_id: NotRequired[str] + r"""The legacy name for `directory_group_id`. Send either one, or both with the same value; sending both with different values is rejected.""" + precedence: NotRequired[int] + r"""The precedence for this mapping. Lower values take priority when a user belongs + to multiple mapped groups. If omitted, the mapping is appended with the + next-highest precedence. + """ + + +class CreateDirectoryGroupRoleMappingRequestBody(BaseModel): + role_id: str + r"""The ID of the organization role to assign to members of the group.""" + + directory_group_id: Optional[str] = None + r"""The group ID from the identity provider. Exactly one of `directory_group_id` or `scim_group_id` is required.""" + + scim_group_id: Optional[str] = None + r"""The legacy name for `directory_group_id`. Send either one, or both with the same value; sending both with different values is rejected.""" + + precedence: Optional[int] = None + r"""The precedence for this mapping. Lower values take priority when a user belongs + to multiple mapped groups. If omitted, the mapping is appended with the + next-highest precedence. + """ + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["directory_group_id", "scim_group_id", "precedence"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m + + +class CreateDirectoryGroupRoleMappingRequestTypedDict(TypedDict): + directory_id: str + r"""The ID of the directory.""" + request_body: CreateDirectoryGroupRoleMappingRequestBodyTypedDict + + +class CreateDirectoryGroupRoleMappingRequest(BaseModel): + directory_id: Annotated[ + str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) + ] + r"""The ID of the directory.""" + + request_body: Annotated[ + CreateDirectoryGroupRoleMappingRequestBody, + FieldMetadata(request=RequestMetadata(media_type="application/json")), + ] diff --git a/src/clerk_backend_api/models/createdirectoryop.py b/src/clerk_backend_api/models/createdirectoryop.py new file mode 100644 index 00000000..bc2afd06 --- /dev/null +++ b/src/clerk_backend_api/models/createdirectoryop.py @@ -0,0 +1,107 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import BaseModel, UNSET_SENTINEL +from pydantic import model_serializer +from typing import List, Optional +from typing_extensions import NotRequired, TypedDict + + +class CreateDirectoryGroupRoleMappingsTypedDict(TypedDict): + role_id: str + r"""The organization role ID to assign to members of the group.""" + directory_group_id: NotRequired[str] + r"""The group ID from the identity provider. Exactly one of `directory_group_id` or `scim_group_id` is required.""" + scim_group_id: NotRequired[str] + r"""The legacy name for `directory_group_id`. Send either one, or both with the same value; sending both with different values is rejected.""" + directory_group_display_name: NotRequired[str] + r"""Optional display name for the group.""" + scim_group_display_name: NotRequired[str] + r"""The legacy name for `directory_group_display_name`. Send either one, or both with the same value; sending both with different values is rejected.""" + precedence: NotRequired[int] + r"""The precedence for this mapping. If omitted, precedence is assigned by array order.""" + + +class CreateDirectoryGroupRoleMappings(BaseModel): + role_id: str + r"""The organization role ID to assign to members of the group.""" + + directory_group_id: Optional[str] = None + r"""The group ID from the identity provider. Exactly one of `directory_group_id` or `scim_group_id` is required.""" + + scim_group_id: Optional[str] = None + r"""The legacy name for `directory_group_id`. Send either one, or both with the same value; sending both with different values is rejected.""" + + directory_group_display_name: Optional[str] = None + r"""Optional display name for the group.""" + + scim_group_display_name: Optional[str] = None + r"""The legacy name for `directory_group_display_name`. Send either one, or both with the same value; sending both with different values is rejected.""" + + precedence: Optional[int] = None + r"""The precedence for this mapping. If omitted, precedence is assigned by array order.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set( + [ + "directory_group_id", + "scim_group_id", + "directory_group_display_name", + "scim_group_display_name", + "precedence", + ] + ) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m + + +class CreateDirectoryRequestBodyTypedDict(TypedDict): + enterprise_connection_id: str + r"""The ID of the enterprise connection to associate with this directory.""" + provider: str + r"""The identity provider for this directory.""" + name: NotRequired[str] + r"""A human-friendly name for the directory.""" + group_role_mappings: NotRequired[List[CreateDirectoryGroupRoleMappingsTypedDict]] + r"""Optional directory group to organization role mappings to create with the directory.""" + + +class CreateDirectoryRequestBody(BaseModel): + enterprise_connection_id: str + r"""The ID of the enterprise connection to associate with this directory.""" + + provider: str + r"""The identity provider for this directory.""" + + name: Optional[str] = None + r"""A human-friendly name for the directory.""" + + group_role_mappings: Optional[List[CreateDirectoryGroupRoleMappings]] = None + r"""Optional directory group to organization role mappings to create with the directory.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["name", "group_role_mappings"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/clerk_backend_api/models/createenterpriseconnectionop.py b/src/clerk_backend_api/models/createenterpriseconnectionop.py index ed7e2182..8aad27ac 100644 --- a/src/clerk_backend_api/models/createenterpriseconnectionop.py +++ b/src/clerk_backend_api/models/createenterpriseconnectionop.py @@ -325,6 +325,8 @@ class CreateEnterpriseConnectionCustomAttributesTypedDict(TypedDict): r"""Path to extract the attribute value from SSO claims""" scim_path: NotRequired[str] r"""GJSON path to extract the attribute value from SCIM user resources""" + directory_path: NotRequired[str] + r"""The new name for `scim_path`. Send either one, or both with the same value; sending both with different values is rejected.""" multi_valued: NotRequired[bool] r"""When true, the attribute supports multiple values; values from the IdP are written to public_metadata as an array. Defaults to false.""" @@ -342,12 +344,17 @@ class CreateEnterpriseConnectionCustomAttributes(BaseModel): scim_path: Optional[str] = None r"""GJSON path to extract the attribute value from SCIM user resources""" + directory_path: Optional[str] = None + r"""The new name for `scim_path`. Send either one, or both with the same value; sending both with different values is rejected.""" + multi_valued: Optional[bool] = None r"""When true, the attribute supports multiple values; values from the IdP are written to public_metadata as an array. Defaults to false.""" @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = set(["sso_path", "scim_path", "multi_valued"]) + optional_fields = set( + ["sso_path", "scim_path", "directory_path", "multi_valued"] + ) serialized = handler(self) m = {} diff --git a/src/clerk_backend_api/models/createoauthapplicationop.py b/src/clerk_backend_api/models/createoauthapplicationop.py index ecde431d..faad9f83 100644 --- a/src/clerk_backend_api/models/createoauthapplicationop.py +++ b/src/clerk_backend_api/models/createoauthapplicationop.py @@ -24,11 +24,13 @@ class CreateOAuthApplicationRequestBodyTypedDict(TypedDict): callback_url: NotRequired[Nullable[str]] r"""The callback URL of the new OAuth application""" scopes: NotRequired[Nullable[str]] - r"""Define the allowed scopes for the new OAuth applications that dictate the user payload of the OAuth user info endpoint. Available scopes are `profile`, `email`, `public_metadata`, `private_metadata`. Provide the requested scopes as a string, separated by spaces.""" + r"""Define the application's built-in and custom scope ceiling. Provide scope keys as a space-delimited string. Custom keys must exist in the instance OAuth scope catalog.""" consent_screen_enabled: NotRequired[Nullable[bool]] r"""True to enable a consent screen to display in the authentication flow.""" pkce_required: NotRequired[Nullable[bool]] r"""True to require the Proof Key of Code Exchange (PKCE) flow.""" + device_authorization_grant_enabled: NotRequired[Nullable[bool]] + r"""True to enable the OAuth Device Authorization Grant for this application. Enabling requires the OAuth Device Authorization Grant feature to be enabled for the instance.""" public: NotRequired[Nullable[bool]] r"""If true, this client is public and you can use the Proof Key of Code Exchange (PKCE) flow.""" @@ -51,7 +53,7 @@ class CreateOAuthApplicationRequestBody(BaseModel): r"""The callback URL of the new OAuth application""" scopes: OptionalNullable[str] = "profile email" - r"""Define the allowed scopes for the new OAuth applications that dictate the user payload of the OAuth user info endpoint. Available scopes are `profile`, `email`, `public_metadata`, `private_metadata`. Provide the requested scopes as a string, separated by spaces.""" + r"""Define the application's built-in and custom scope ceiling. Provide scope keys as a space-delimited string. Custom keys must exist in the instance OAuth scope catalog.""" consent_screen_enabled: OptionalNullable[bool] = True r"""True to enable a consent screen to display in the authentication flow.""" @@ -59,6 +61,9 @@ class CreateOAuthApplicationRequestBody(BaseModel): pkce_required: OptionalNullable[bool] = False r"""True to require the Proof Key of Code Exchange (PKCE) flow.""" + device_authorization_grant_enabled: OptionalNullable[bool] = False + r"""True to enable the OAuth Device Authorization Grant for this application. Enabling requires the OAuth Device Authorization Grant feature to be enabled for the instance.""" + public: OptionalNullable[bool] = UNSET r"""If true, this client is public and you can use the Proof Key of Code Exchange (PKCE) flow.""" @@ -71,6 +76,7 @@ def serialize_model(self, handler): "scopes", "consent_screen_enabled", "pkce_required", + "device_authorization_grant_enabled", "public", ] ) @@ -81,6 +87,7 @@ def serialize_model(self, handler): "scopes", "consent_screen_enabled", "pkce_required", + "device_authorization_grant_enabled", "public", ] ) diff --git a/src/clerk_backend_api/models/createscimdirectoryop.py b/src/clerk_backend_api/models/createscimdirectoryop.py index 1aaba828..c4eb7fb5 100644 --- a/src/clerk_backend_api/models/createscimdirectoryop.py +++ b/src/clerk_backend_api/models/createscimdirectoryop.py @@ -50,24 +50,24 @@ def serialize_model(self, handler): class CreateSCIMDirectoryRequestBodyTypedDict(TypedDict): enterprise_connection_id: str - r"""The ID of the enterprise connection to associate with this SCIM directory.""" + r"""The ID of the enterprise connection to associate with this directory.""" provider: str - r"""The identity provider for this SCIM directory.""" + r"""The identity provider for this directory.""" name: NotRequired[str] - r"""A human-friendly name for the SCIM directory.""" + r"""A human-friendly name for the directory.""" group_role_mappings: NotRequired[List[GroupRoleMappingsTypedDict]] r"""Optional SCIM group to organization role mappings to create with the directory.""" class CreateSCIMDirectoryRequestBody(BaseModel): enterprise_connection_id: str - r"""The ID of the enterprise connection to associate with this SCIM directory.""" + r"""The ID of the enterprise connection to associate with this directory.""" provider: str - r"""The identity provider for this SCIM directory.""" + r"""The identity provider for this directory.""" name: Optional[str] = None - r"""A human-friendly name for the SCIM directory.""" + r"""A human-friendly name for the directory.""" group_role_mappings: Optional[List[GroupRoleMappings]] = None r"""Optional SCIM group to organization role mappings to create with the directory.""" diff --git a/src/clerk_backend_api/models/createscimgrouprolemappingop.py b/src/clerk_backend_api/models/createscimgrouprolemappingop.py index e09fd3cd..52c2c8f8 100644 --- a/src/clerk_backend_api/models/createscimgrouprolemappingop.py +++ b/src/clerk_backend_api/models/createscimgrouprolemappingop.py @@ -52,7 +52,7 @@ def serialize_model(self, handler): class CreateSCIMGroupRoleMappingRequestTypedDict(TypedDict): scim_directory_id: str - r"""The ID of the SCIM directory.""" + r"""The ID of the directory.""" request_body: CreateSCIMGroupRoleMappingRequestBodyTypedDict @@ -60,7 +60,7 @@ class CreateSCIMGroupRoleMappingRequest(BaseModel): scim_directory_id: Annotated[ str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) ] - r"""The ID of the SCIM directory.""" + r"""The ID of the directory.""" request_body: Annotated[ CreateSCIMGroupRoleMappingRequestBody, diff --git a/src/clerk_backend_api/models/createuserop.py b/src/clerk_backend_api/models/createuserop.py index 2f1e91c4..22c76bf3 100644 --- a/src/clerk_backend_api/models/createuserop.py +++ b/src/clerk_backend_api/models/createuserop.py @@ -106,6 +106,11 @@ class CreateUserRequestBodyTypedDict(TypedDict): This is useful when you are trying to create a user that doesn't have a password, in an instance that is using passwords. Please note that you cannot use this flag if password is the only way for a user to sign into your instance. """ + skip_restriction_checks: NotRequired[Nullable[bool]] + r"""When set to `true`, the instance's restrictions are not applied to this user. + Those settings are the allowlist, the blocklist, blocked disposable email domains and blocked email subaddresses, and they normally reject a matching identifier here just as they do at sign-up. + Use this when your backend is creating a user it already trusts, such as during a migration or from an admin tool. + """ totp_secret: NotRequired[Nullable[str]] r"""In case TOTP is configured on the instance, you can provide the secret to enable it on the newly created user without the need to reset it. Please note that currently the supported options are: @@ -152,7 +157,7 @@ class CreateUserRequestBodyTypedDict(TypedDict): created_at: NotRequired[Nullable[str]] r"""A custom date/time denoting _when_ the user signed up to the application, specified in RFC3339 format (e.g. `2012-10-20T07:15:20.902Z`).""" bypass_client_trust: NotRequired[Nullable[bool]] - r"""When set to `true`, the user will bypass client trust checks during sign-in.""" + r"""When set to `true`, the user will bypass Device Trust checks during sign-in.""" banned: NotRequired[Nullable[bool]] r"""When set to `true`, the user is created already banned and cannot sign in. Requires the same plan support as the ban user endpoint. @@ -260,6 +265,12 @@ class CreateUserRequestBody(BaseModel): Please note that you cannot use this flag if password is the only way for a user to sign into your instance. """ + skip_restriction_checks: OptionalNullable[bool] = UNSET + r"""When set to `true`, the instance's restrictions are not applied to this user. + Those settings are the allowlist, the blocklist, blocked disposable email domains and blocked email subaddresses, and they normally reject a matching identifier here just as they do at sign-up. + Use this when your backend is creating a user it already trusts, such as during a migration or from an admin tool. + """ + totp_secret: OptionalNullable[str] = UNSET r"""In case TOTP is configured on the instance, you can provide the secret to enable it on the newly created user without the need to reset it. Please note that currently the supported options are: @@ -318,7 +329,7 @@ class CreateUserRequestBody(BaseModel): r"""A custom date/time denoting _when_ the user signed up to the application, specified in RFC3339 format (e.g. `2012-10-20T07:15:20.902Z`).""" bypass_client_trust: OptionalNullable[bool] = UNSET - r"""When set to `true`, the user will bypass client trust checks during sign-in.""" + r"""When set to `true`, the user will bypass Device Trust checks during sign-in.""" banned: OptionalNullable[bool] = UNSET r"""When set to `true`, the user is created already banned and cannot sign in. @@ -349,6 +360,7 @@ def serialize_model(self, handler): "password_hasher", "skip_password_checks", "skip_password_requirement", + "skip_restriction_checks", "totp_secret", "backup_codes", "public_metadata", @@ -377,6 +389,7 @@ def serialize_model(self, handler): "password_digest", "skip_password_checks", "skip_password_requirement", + "skip_restriction_checks", "totp_secret", "delete_self_enabled", "legal_accepted_at", diff --git a/src/clerk_backend_api/models/deletedirectorygrouprolemappingop.py b/src/clerk_backend_api/models/deletedirectorygrouprolemappingop.py new file mode 100644 index 00000000..58c53139 --- /dev/null +++ b/src/clerk_backend_api/models/deletedirectorygrouprolemappingop.py @@ -0,0 +1,25 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import BaseModel +from clerk_backend_api.utils import FieldMetadata, PathParamMetadata +from typing_extensions import Annotated, TypedDict + + +class DeleteDirectoryGroupRoleMappingRequestTypedDict(TypedDict): + directory_id: str + r"""The ID of the directory.""" + mapping_id: str + r"""The ID of the directory group role mapping to delete.""" + + +class DeleteDirectoryGroupRoleMappingRequest(BaseModel): + directory_id: Annotated[ + str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) + ] + r"""The ID of the directory.""" + + mapping_id: Annotated[ + str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) + ] + r"""The ID of the directory group role mapping to delete.""" diff --git a/src/clerk_backend_api/models/deletedirectoryop.py b/src/clerk_backend_api/models/deletedirectoryop.py new file mode 100644 index 00000000..505fd40b --- /dev/null +++ b/src/clerk_backend_api/models/deletedirectoryop.py @@ -0,0 +1,18 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import BaseModel +from clerk_backend_api.utils import FieldMetadata, PathParamMetadata +from typing_extensions import Annotated, TypedDict + + +class DeleteDirectoryRequestTypedDict(TypedDict): + directory_id: str + r"""The ID of the directory to delete""" + + +class DeleteDirectoryRequest(BaseModel): + directory_id: Annotated[ + str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) + ] + r"""The ID of the directory to delete""" diff --git a/src/clerk_backend_api/models/deletescimdirectoryop.py b/src/clerk_backend_api/models/deletescimdirectoryop.py index cf4ffa57..494c0158 100644 --- a/src/clerk_backend_api/models/deletescimdirectoryop.py +++ b/src/clerk_backend_api/models/deletescimdirectoryop.py @@ -8,11 +8,11 @@ class DeleteSCIMDirectoryRequestTypedDict(TypedDict): scim_directory_id: str - r"""The ID of the SCIM directory to delete""" + r"""The ID of the directory to delete""" class DeleteSCIMDirectoryRequest(BaseModel): scim_directory_id: Annotated[ str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) ] - r"""The ID of the SCIM directory to delete""" + r"""The ID of the directory to delete""" diff --git a/src/clerk_backend_api/models/deletescimgrouprolemappingop.py b/src/clerk_backend_api/models/deletescimgrouprolemappingop.py index e36932ac..c5b91dff 100644 --- a/src/clerk_backend_api/models/deletescimgrouprolemappingop.py +++ b/src/clerk_backend_api/models/deletescimgrouprolemappingop.py @@ -8,7 +8,7 @@ class DeleteSCIMGroupRoleMappingRequestTypedDict(TypedDict): scim_directory_id: str - r"""The ID of the SCIM directory.""" + r"""The ID of the directory.""" mapping_id: str r"""The ID of the SCIM group role mapping to delete.""" @@ -17,7 +17,7 @@ class DeleteSCIMGroupRoleMappingRequest(BaseModel): scim_directory_id: Annotated[ str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) ] - r"""The ID of the SCIM directory.""" + r"""The ID of the directory.""" mapping_id: Annotated[ str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) diff --git a/src/clerk_backend_api/models/directory.py b/src/clerk_backend_api/models/directory.py new file mode 100644 index 00000000..a10fa2e2 --- /dev/null +++ b/src/clerk_backend_api/models/directory.py @@ -0,0 +1,174 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import ( + BaseModel, + Nullable, + OptionalNullable, + UNSET, + UNSET_SENTINEL, +) +from enum import Enum +from pydantic import model_serializer +from typing import Dict, List, Optional +from typing_extensions import NotRequired, TypedDict + + +class DirectoryObject(str, Enum): + r"""String representing the object's type. Always \"directory\".""" + + DIRECTORY = "directory" + + +class DirectoryCustomAttributesTypedDict(TypedDict): + name: NotRequired[str] + r"""Display name for the custom attribute""" + key: NotRequired[str] + r"""Key used to store the attribute in the user's public/private/unsafe metadata""" + sso_path: NotRequired[str] + r"""Path to extract the attribute value from SSO claims (SAML assertions or OIDC claims)""" + scim_path: NotRequired[str] + r"""The legacy name for `directory_path`. Carries the same value.""" + directory_path: NotRequired[str] + r"""GJSON path to extract the attribute value from directory sync user resources""" + multi_valued: NotRequired[bool] + r"""When true, the attribute supports multiple values; values from the IdP are written to public_metadata as an array. Defaults to false.""" + + +class DirectoryCustomAttributes(BaseModel): + name: Optional[str] = None + r"""Display name for the custom attribute""" + + key: Optional[str] = None + r"""Key used to store the attribute in the user's public/private/unsafe metadata""" + + sso_path: Optional[str] = None + r"""Path to extract the attribute value from SSO claims (SAML assertions or OIDC claims)""" + + scim_path: Optional[str] = None + r"""The legacy name for `directory_path`. Carries the same value.""" + + directory_path: Optional[str] = None + r"""GJSON path to extract the attribute value from directory sync user resources""" + + multi_valued: Optional[bool] = None + r"""When true, the attribute supports multiple values; values from the IdP are written to public_metadata as an array. Defaults to false.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set( + ["name", "key", "sso_path", "scim_path", "directory_path", "multi_valued"] + ) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m + + +class DirectoryTypedDict(TypedDict): + r"""A directory configuration for provisioning users from an identity provider.""" + + object: DirectoryObject + r"""String representing the object's type. Always \"directory\".""" + id: str + r"""Unique identifier for the directory.""" + name: str + r"""A human-friendly name for the directory.""" + endpoint_url: str + r"""The provisioning endpoint URL for this directory.""" + provider: str + r"""The identity provider for this directory.""" + enabled: bool + r"""Whether the directory is enabled.""" + group_role_mapping_enabled: bool + r"""Whether group-to-role mapping is enabled for this directory.""" + attribute_mapping: Dict[str, str] + r"""Mapping of user attributes to the directory attribute paths they are extracted from.""" + created_at: int + r"""Unix timestamp when the directory was created.""" + updated_at: int + r"""Unix timestamp when the directory was last updated.""" + enterprise_connection_id: NotRequired[Nullable[str]] + r"""The ID of the associated enterprise connection.""" + custom_attributes: NotRequired[List[DirectoryCustomAttributesTypedDict]] + r"""Custom attributes to map from the IdP to the user's profile via directory sync. Requires the custom attributes feature to be enabled for the instance.""" + api_key: NotRequired[Nullable[str]] + r"""The API key for authenticating provisioning requests. Only returned when the directory is created or the key is rotated.""" + + +class Directory(BaseModel): + r"""A directory configuration for provisioning users from an identity provider.""" + + object: DirectoryObject + r"""String representing the object's type. Always \"directory\".""" + + id: str + r"""Unique identifier for the directory.""" + + name: str + r"""A human-friendly name for the directory.""" + + endpoint_url: str + r"""The provisioning endpoint URL for this directory.""" + + provider: str + r"""The identity provider for this directory.""" + + enabled: bool + r"""Whether the directory is enabled.""" + + group_role_mapping_enabled: bool + r"""Whether group-to-role mapping is enabled for this directory.""" + + attribute_mapping: Dict[str, str] + r"""Mapping of user attributes to the directory attribute paths they are extracted from.""" + + created_at: int + r"""Unix timestamp when the directory was created.""" + + updated_at: int + r"""Unix timestamp when the directory was last updated.""" + + enterprise_connection_id: OptionalNullable[str] = UNSET + r"""The ID of the associated enterprise connection.""" + + custom_attributes: Optional[List[DirectoryCustomAttributes]] = None + r"""Custom attributes to map from the IdP to the user's profile via directory sync. Requires the custom attributes feature to be enabled for the instance.""" + + api_key: OptionalNullable[str] = UNSET + r"""The API key for authenticating provisioning requests. Only returned when the directory is created or the key is rotated.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set( + ["enterprise_connection_id", "custom_attributes", "api_key"] + ) + nullable_fields = set(["enterprise_connection_id", "api_key"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + is_nullable_and_explicitly_set = ( + k in nullable_fields + and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member + ) + + if val != UNSET_SENTINEL: + if ( + val is not None + or k not in optional_fields + or is_nullable_and_explicitly_set + ): + m[k] = val + + return m diff --git a/src/clerk_backend_api/models/directory_list.py b/src/clerk_backend_api/models/directory_list.py new file mode 100644 index 00000000..f5a38c1a --- /dev/null +++ b/src/clerk_backend_api/models/directory_list.py @@ -0,0 +1,24 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .directory import Directory, DirectoryTypedDict +from clerk_backend_api.types import BaseModel +from typing import List +from typing_extensions import TypedDict + + +class DirectoryListTypedDict(TypedDict): + r"""A list of directories""" + + data: List[DirectoryTypedDict] + total_count: int + r"""Total number of directories.""" + + +class DirectoryList(BaseModel): + r"""A list of directories""" + + data: List[Directory] + + total_count: int + r"""Total number of directories.""" diff --git a/src/clerk_backend_api/models/directorygrouprolemapping.py b/src/clerk_backend_api/models/directorygrouprolemapping.py new file mode 100644 index 00000000..bde248ab --- /dev/null +++ b/src/clerk_backend_api/models/directorygrouprolemapping.py @@ -0,0 +1,98 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .role import Role, RoleTypedDict +from clerk_backend_api.types import BaseModel, UNSET_SENTINEL +from enum import Enum +from pydantic import model_serializer +from typing import Optional +from typing_extensions import NotRequired, TypedDict + + +class DirectoryGroupRoleMappingObject(str, Enum): + r"""String representing the object's type. Always \"directory_group_role_mapping\".""" + + DIRECTORY_GROUP_ROLE_MAPPING = "directory_group_role_mapping" + + +class DirectoryGroupRoleMappingTypedDict(TypedDict): + r"""A mapping from a directory group to an organization role. Members of the group are assigned the role; the lowest-precedence match wins when a user belongs to multiple mapped groups.""" + + object: DirectoryGroupRoleMappingObject + r"""String representing the object's type. Always \"directory_group_role_mapping\".""" + id: str + r"""Unique identifier for the directory group role mapping.""" + directory_id: str + r"""The ID of the directory this mapping belongs to.""" + scim_directory_id: str + r"""The legacy name for `directory_id`. Carries the same value.""" + directory_group_id: str + r"""The group ID from the identity provider.""" + scim_group_id: str + r"""The legacy name for `directory_group_id`. Carries the same value.""" + directory_group_display_name: str + r"""The display name of the group, as reported by the identity provider.""" + scim_group_display_name: str + r"""The legacy name for `directory_group_display_name`. Carries the same value.""" + precedence: int + r"""Mapping precedence, starting at 1. Lower values take priority when a user belongs to multiple mapped groups.""" + created_at: int + r"""Unix timestamp (milliseconds) of when the mapping was created.""" + updated_at: int + r"""Unix timestamp (milliseconds) of when the mapping was last updated.""" + role: NotRequired[RoleTypedDict] + + +class DirectoryGroupRoleMapping(BaseModel): + r"""A mapping from a directory group to an organization role. Members of the group are assigned the role; the lowest-precedence match wins when a user belongs to multiple mapped groups.""" + + object: DirectoryGroupRoleMappingObject + r"""String representing the object's type. Always \"directory_group_role_mapping\".""" + + id: str + r"""Unique identifier for the directory group role mapping.""" + + directory_id: str + r"""The ID of the directory this mapping belongs to.""" + + scim_directory_id: str + r"""The legacy name for `directory_id`. Carries the same value.""" + + directory_group_id: str + r"""The group ID from the identity provider.""" + + scim_group_id: str + r"""The legacy name for `directory_group_id`. Carries the same value.""" + + directory_group_display_name: str + r"""The display name of the group, as reported by the identity provider.""" + + scim_group_display_name: str + r"""The legacy name for `directory_group_display_name`. Carries the same value.""" + + precedence: int + r"""Mapping precedence, starting at 1. Lower values take priority when a user belongs to multiple mapped groups.""" + + created_at: int + r"""Unix timestamp (milliseconds) of when the mapping was created.""" + + updated_at: int + r"""Unix timestamp (milliseconds) of when the mapping was last updated.""" + + role: Optional[Role] = None + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["role"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/clerk_backend_api/models/directorygrouprolemapping_deleted.py b/src/clerk_backend_api/models/directorygrouprolemapping_deleted.py new file mode 100644 index 00000000..b6738406 --- /dev/null +++ b/src/clerk_backend_api/models/directorygrouprolemapping_deleted.py @@ -0,0 +1,49 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import BaseModel +from clerk_backend_api.utils import validate_const +from enum import Enum +import pydantic +from pydantic.functional_validators import AfterValidator +from typing import Literal +from typing_extensions import Annotated, TypedDict + + +class DirectoryGroupRoleMappingDeletedObject(str, Enum): + r"""String representing the object's type.""" + + DIRECTORY_GROUP_ROLE_MAPPING = "directory_group_role_mapping" + + +class DirectoryGroupRoleMappingDeletedTypedDict(TypedDict): + r"""A directory group role mapping was deleted.""" + + object: DirectoryGroupRoleMappingDeletedObject + r"""String representing the object's type.""" + id: str + r"""The ID of the deleted directory group role mapping.""" + deleted: Literal[True] + r"""Whether the directory group role mapping was successfully deleted.""" + + +class DirectoryGroupRoleMappingDeleted(BaseModel): + r"""A directory group role mapping was deleted.""" + + object: DirectoryGroupRoleMappingDeletedObject + r"""String representing the object's type.""" + + id: str + r"""The ID of the deleted directory group role mapping.""" + + DELETED: Annotated[ + Annotated[Literal[True], AfterValidator(validate_const(True))], + pydantic.Field(alias="deleted"), + ] = True + r"""Whether the directory group role mapping was successfully deleted.""" + + +try: + DirectoryGroupRoleMappingDeleted.model_rebuild() +except NameError: + pass diff --git a/src/clerk_backend_api/models/directorygrouprolemapping_list.py b/src/clerk_backend_api/models/directorygrouprolemapping_list.py new file mode 100644 index 00000000..ee711314 --- /dev/null +++ b/src/clerk_backend_api/models/directorygrouprolemapping_list.py @@ -0,0 +1,27 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .directorygrouprolemapping import ( + DirectoryGroupRoleMapping, + DirectoryGroupRoleMappingTypedDict, +) +from clerk_backend_api.types import BaseModel +from typing import List +from typing_extensions import TypedDict + + +class DirectoryGroupRoleMappingListTypedDict(TypedDict): + r"""A list of directory group role mappings, ordered by precedence.""" + + data: List[DirectoryGroupRoleMappingTypedDict] + total_count: int + r"""Total number of directory group role mappings in the directory.""" + + +class DirectoryGroupRoleMappingList(BaseModel): + r"""A list of directory group role mappings, ordered by precedence.""" + + data: List[DirectoryGroupRoleMapping] + + total_count: int + r"""Total number of directory group role mappings in the directory.""" diff --git a/src/clerk_backend_api/models/dnstarget.py b/src/clerk_backend_api/models/dnstarget.py new file mode 100644 index 00000000..5b44d71d --- /dev/null +++ b/src/clerk_backend_api/models/dnstarget.py @@ -0,0 +1,61 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import BaseModel, UNSET_SENTINEL +from enum import Enum +from pydantic import model_serializer +from typing import Optional +from typing_extensions import NotRequired, TypedDict + + +class RecordType(str, Enum): + CNAME = "CNAME" + TXT = "TXT" + + +class AutomationDisposition(str, Enum): + ALREADY_SATISFIED = "already_satisfied" + SAFE_TO_CREATE = "safe_to_create" + MANUAL_RESOLUTION_REQUIRED = "manual_resolution_required" + + +class DNSTargetTypedDict(TypedDict): + host: str + value: str + record_type: RecordType + required: bool + r"""Denotes whether this DNS target is required to be set in order for the domain to be considered deployed. + + """ + automation_disposition: NotRequired[AutomationDisposition] + + +class DNSTarget(BaseModel): + host: str + + value: str + + record_type: RecordType + + required: bool + r"""Denotes whether this DNS target is required to be set in order for the domain to be considered deployed. + + """ + + automation_disposition: Optional[AutomationDisposition] = None + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["automation_disposition"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/clerk_backend_api/models/domain.py b/src/clerk_backend_api/models/domain.py index c297fb6c..6bec7b46 100644 --- a/src/clerk_backend_api/models/domain.py +++ b/src/clerk_backend_api/models/domain.py @@ -2,6 +2,7 @@ from __future__ import annotations from .cnametarget import CNameTarget, CNameTargetTypedDict +from .dnstarget import DNSTarget, DNSTargetTypedDict from clerk_backend_api.types import ( BaseModel, Nullable, @@ -32,6 +33,11 @@ class DomainTypedDict(TypedDict): """ proxy_url: NotRequired[Nullable[str]] cname_targets: NotRequired[Nullable[List[CNameTargetTypedDict]]] + r"""Legacy CNAME-only DNS targets. Prefer `dns_targets` when present.""" + dns_targets: NotRequired[Nullable[List[DNSTargetTypedDict]]] + r"""The complete typed DNS contract. Consumers should use this field instead of merging it with `cname_targets`. + + """ class Domain(BaseModel): @@ -55,11 +61,21 @@ class Domain(BaseModel): proxy_url: OptionalNullable[str] = UNSET cname_targets: OptionalNullable[List[CNameTarget]] = UNSET + r"""Legacy CNAME-only DNS targets. Prefer `dns_targets` when present.""" + + dns_targets: OptionalNullable[List[DNSTarget]] = UNSET + r"""The complete typed DNS contract. Consumers should use this field instead of merging it with `cname_targets`. + + """ @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = set(["accounts_portal_url", "proxy_url", "cname_targets"]) - nullable_fields = set(["accounts_portal_url", "proxy_url", "cname_targets"]) + optional_fields = set( + ["accounts_portal_url", "proxy_url", "cname_targets", "dns_targets"] + ) + nullable_fields = set( + ["accounts_portal_url", "proxy_url", "cname_targets", "dns_targets"] + ) serialized = handler(self) m = {} diff --git a/src/clerk_backend_api/models/enterpriseconnection.py b/src/clerk_backend_api/models/enterpriseconnection.py index 20e62efc..ee5e57ec 100644 --- a/src/clerk_backend_api/models/enterpriseconnection.py +++ b/src/clerk_backend_api/models/enterpriseconnection.py @@ -27,6 +27,8 @@ class CustomAttributesTypedDict(TypedDict): r"""Path to extract the attribute value from SSO claims (SAML assertions or OIDC claims)""" scim_path: NotRequired[str] r"""GJSON path to extract the attribute value from SCIM user resources""" + directory_path: NotRequired[str] + r"""GJSON path to extract the attribute value from directory sync user resources. Same value as `scim_path`.""" multi_valued: NotRequired[bool] r"""When true, the attribute supports multiple values; values from the IdP are written to public_metadata as an array. Defaults to false.""" @@ -44,12 +46,17 @@ class CustomAttributes(BaseModel): scim_path: Optional[str] = None r"""GJSON path to extract the attribute value from SCIM user resources""" + directory_path: Optional[str] = None + r"""GJSON path to extract the attribute value from directory sync user resources. Same value as `scim_path`.""" + multi_valued: Optional[bool] = None r"""When true, the attribute supports multiple values; values from the IdP are written to public_metadata as an array. Defaults to false.""" @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = set(["sso_path", "scim_path", "multi_valued"]) + optional_fields = set( + ["sso_path", "scim_path", "directory_path", "multi_valued"] + ) serialized = handler(self) m = {} diff --git a/src/clerk_backend_api/models/getdirectoryop.py b/src/clerk_backend_api/models/getdirectoryop.py new file mode 100644 index 00000000..71ad4c6a --- /dev/null +++ b/src/clerk_backend_api/models/getdirectoryop.py @@ -0,0 +1,18 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import BaseModel +from clerk_backend_api.utils import FieldMetadata, PathParamMetadata +from typing_extensions import Annotated, TypedDict + + +class GetDirectoryRequestTypedDict(TypedDict): + directory_id: str + r"""The ID of the directory to retrieve""" + + +class GetDirectoryRequest(BaseModel): + directory_id: Annotated[ + str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) + ] + r"""The ID of the directory to retrieve""" diff --git a/src/clerk_backend_api/models/getscimdirectoryop.py b/src/clerk_backend_api/models/getscimdirectoryop.py index a0ffd4b4..7deabff4 100644 --- a/src/clerk_backend_api/models/getscimdirectoryop.py +++ b/src/clerk_backend_api/models/getscimdirectoryop.py @@ -8,11 +8,11 @@ class GetSCIMDirectoryRequestTypedDict(TypedDict): scim_directory_id: str - r"""The ID of the SCIM directory to retrieve""" + r"""The ID of the directory to retrieve""" class GetSCIMDirectoryRequest(BaseModel): scim_directory_id: Annotated[ str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) ] - r"""The ID of the SCIM directory to retrieve""" + r"""The ID of the directory to retrieve""" diff --git a/src/clerk_backend_api/models/getuserlistop.py b/src/clerk_backend_api/models/getuserlistop.py index 2b0d0415..9e1fe987 100644 --- a/src/clerk_backend_api/models/getuserlistop.py +++ b/src/clerk_backend_api/models/getuserlistop.py @@ -128,6 +128,16 @@ class GetUserListRequestTypedDict(TypedDict): Needs to be an integer greater or equal to zero. To be used in conjunction with `limit`. """ + starting_after: NotRequired[str] + r"""A cursor for pagination: the `id` of the last user on the previous page. Returns the users that follow it. + + **Requires ordering by `created_at`** — that is, `order_by` omitted, or set to `created_at`, `+created_at` + or `-created_at`. Any other `order_by` value is rejected with a 422: the other orderings sort by a value + that is neither unique per user nor immutable, so a cursor over them would skip or repeat users. + + Cannot be combined with a non-zero `offset`, which is also a 422. Keep every other parameter identical + across requests, and stop when a page returns fewer than `limit` users. + """ order_by: NotRequired[str] r"""Allows to return users in a particular order. At the moment, you can order the returned users by their `created_at`,`updated_at`,`email_address`,`web3wallet`,`first_name`,`last_name`,`phone_number`,`username`,`last_active_at`,`last_sign_in_at`. @@ -135,6 +145,7 @@ class GetUserListRequestTypedDict(TypedDict): For example, if you want users to be returned in descending order according to their `created_at` property, you can use `-created_at`. If you don't use `+` or `-`, then `+` is implied. We only support one `order_by` parameter, and if multiple `order_by` parameters are provided, we will only keep the first one. For example, if you pass `order_by=username&order_by=created_at`, we will consider only the first `order_by` parameter, which is `username`. The `created_at` parameter will be ignored in this case. + Only the `created_at` orderings can be combined with `starting_after` cursor pagination; see that parameter. """ @@ -356,6 +367,20 @@ class GetUserListRequest(BaseModel): To be used in conjunction with `limit`. """ + starting_after: Annotated[ + Optional[str], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""A cursor for pagination: the `id` of the last user on the previous page. Returns the users that follow it. + + **Requires ordering by `created_at`** — that is, `order_by` omitted, or set to `created_at`, `+created_at` + or `-created_at`. Any other `order_by` value is rejected with a 422: the other orderings sort by a value + that is neither unique per user nor immutable, so a cursor over them would skip or repeat users. + + Cannot be combined with a non-zero `offset`, which is also a 422. Keep every other parameter identical + across requests, and stop when a page returns fewer than `limit` users. + """ + order_by: Annotated[ Optional[str], FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), @@ -366,6 +391,7 @@ class GetUserListRequest(BaseModel): For example, if you want users to be returned in descending order according to their `created_at` property, you can use `-created_at`. If you don't use `+` or `-`, then `+` is implied. We only support one `order_by` parameter, and if multiple `order_by` parameters are provided, we will only keep the first one. For example, if you pass `order_by=username&order_by=created_at`, we will consider only the first `order_by` parameter, which is `username`. The `created_at` parameter will be ignored in this case. + Only the `created_at` orderings can be combined with `starting_after` cursor pagination; see that parameter. """ @model_serializer(mode="wrap") @@ -396,6 +422,7 @@ def serialize_model(self, handler): "provider_user_id", "limit", "offset", + "starting_after", "order_by", ] ) diff --git a/src/clerk_backend_api/models/instance.py b/src/clerk_backend_api/models/instance.py index 4da77064..7b7b1a08 100644 --- a/src/clerk_backend_api/models/instance.py +++ b/src/clerk_backend_api/models/instance.py @@ -22,6 +22,12 @@ class InstanceTypedDict(TypedDict): id: str environment_type: str allowed_origins: Nullable[List[str]] + allowed_subdomains: List[str] + r"""Subdomains of the instance's own domains that may originate requests, when the subdomain allowlist is enabled. Production instances only; always empty on a development instance.""" + subdomain_allowlist_enabled: bool + r"""Whether requests from subdomains of the instance's own domains are restricted to `allowed_subdomains`. When false, every subdomain of the instance's domain is accepted. Production instances only; always false on a development instance.""" + workspace_id: Nullable[str] + r"""The ID of the Clerk workspace that owns the instance's application. It is null when the application has no owner.""" class Instance(BaseModel): @@ -36,6 +42,15 @@ class Instance(BaseModel): allowed_origins: Nullable[List[str]] + allowed_subdomains: List[str] + r"""Subdomains of the instance's own domains that may originate requests, when the subdomain allowlist is enabled. Production instances only; always empty on a development instance.""" + + subdomain_allowlist_enabled: bool + r"""Whether requests from subdomains of the instance's own domains are restricted to `allowed_subdomains`. When false, every subdomain of the instance's domain is accepted. Production instances only; always false on a development instance.""" + + workspace_id: Nullable[str] + r"""The ID of the Clerk workspace that owns the instance's application. It is null when the application has no owner.""" + @model_serializer(mode="wrap") def serialize_model(self, handler): serialized = handler(self) diff --git a/src/clerk_backend_api/models/instanceprotect.py b/src/clerk_backend_api/models/instanceprotect.py index 35532cca..383388c4 100644 --- a/src/clerk_backend_api/models/instanceprotect.py +++ b/src/clerk_backend_api/models/instanceprotect.py @@ -15,9 +15,14 @@ class InstanceProtectTypedDict(TypedDict): object: InstanceProtectObject rules_enabled: bool + r"""Whether Protect rules are enforced on this instance. False does not mean the instance is outside Protect — by default it is still evaluated in shadow, where rules are scored and recorded but never block.""" specter_enabled: bool checks_bypassed: bool r"""Whether the instance has opted out of the Protect prerequisite checks, asserting its setup already meets the requirements.""" + checks_verified: bool + r"""Whether the Protect system has verified the instance's prerequisite checks. Protect rules are gated on checks being verified, bypassed or exempt.""" + checks_exempt: bool + r"""Whether the instance was created into Protect and so was never subject to the prerequisite checks at all.""" class InstanceProtect(BaseModel): @@ -26,8 +31,15 @@ class InstanceProtect(BaseModel): object: InstanceProtectObject rules_enabled: bool + r"""Whether Protect rules are enforced on this instance. False does not mean the instance is outside Protect — by default it is still evaluated in shadow, where rules are scored and recorded but never block.""" specter_enabled: bool checks_bypassed: bool r"""Whether the instance has opted out of the Protect prerequisite checks, asserting its setup already meets the requirements.""" + + checks_verified: bool + r"""Whether the Protect system has verified the instance's prerequisite checks. Protect rules are gated on checks being verified, bypassed or exempt.""" + + checks_exempt: bool + r"""Whether the instance was created into Protect and so was never subject to the prerequisite checks at all.""" diff --git a/src/clerk_backend_api/models/instancesettings.py b/src/clerk_backend_api/models/instancesettings.py index c0c8e8fc..293dcf8d 100644 --- a/src/clerk_backend_api/models/instancesettings.py +++ b/src/clerk_backend_api/models/instancesettings.py @@ -25,7 +25,7 @@ class InstanceSettingsTypedDict(TypedDict): from_email_address: NotRequired[str] progressive_sign_up: NotRequired[bool] enhanced_email_deliverability: NotRequired[bool] - r"""Deprecated. When enabled, production authentication emails for this instance are sent through Clerk's legacy managed email delivery path. This setting is being retired; use the instance's configured email sending domain instead. + r"""Deprecated. This setting is retired and no longer affects email delivery; all email is sent through the instance's configured email sending domain. The field is preserved for API compatibility only and will be removed in a future version. """ @@ -50,7 +50,7 @@ class InstanceSettings(BaseModel): deprecated="warning: ** DEPRECATED ** - This will be removed in a future release, please migrate away from it as soon as possible." ), ] = None - r"""Deprecated. When enabled, production authentication emails for this instance are sent through Clerk's legacy managed email delivery path. This setting is being retired; use the instance's configured email sending domain instead. + r"""Deprecated. This setting is retired and no longer affects email delivery; all email is sent through the instance's configured email sending domain. The field is preserved for API compatibility only and will be removed in a future version. """ diff --git a/src/clerk_backend_api/models/listdirectoriesop.py b/src/clerk_backend_api/models/listdirectoriesop.py new file mode 100644 index 00000000..65d74f73 --- /dev/null +++ b/src/clerk_backend_api/models/listdirectoriesop.py @@ -0,0 +1,55 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import BaseModel, UNSET_SENTINEL +from clerk_backend_api.utils import FieldMetadata, QueryParamMetadata +from pydantic import model_serializer +from typing import Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +class ListDirectoriesRequestTypedDict(TypedDict): + limit: NotRequired[int] + r"""Applies a limit to the number of results returned. + Can be used for paginating the results together with `offset`. + """ + offset: NotRequired[int] + r"""Skip the first `offset` results when paginating. + Needs to be an integer greater or equal to zero. + To be used in conjunction with `limit`. + """ + + +class ListDirectoriesRequest(BaseModel): + limit: Annotated[ + Optional[int], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = 10 + r"""Applies a limit to the number of results returned. + Can be used for paginating the results together with `offset`. + """ + + offset: Annotated[ + Optional[int], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = 0 + r"""Skip the first `offset` results when paginating. + Needs to be an integer greater or equal to zero. + To be used in conjunction with `limit`. + """ + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["limit", "offset"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/clerk_backend_api/models/listdirectorygrouprolemappingsop.py b/src/clerk_backend_api/models/listdirectorygrouprolemappingsop.py new file mode 100644 index 00000000..c0296894 --- /dev/null +++ b/src/clerk_backend_api/models/listdirectorygrouprolemappingsop.py @@ -0,0 +1,18 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import BaseModel +from clerk_backend_api.utils import FieldMetadata, PathParamMetadata +from typing_extensions import Annotated, TypedDict + + +class ListDirectoryGroupRoleMappingsRequestTypedDict(TypedDict): + directory_id: str + r"""The ID of the directory.""" + + +class ListDirectoryGroupRoleMappingsRequest(BaseModel): + directory_id: Annotated[ + str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) + ] + r"""The ID of the directory.""" diff --git a/src/clerk_backend_api/models/listoauthapplicationsop.py b/src/clerk_backend_api/models/listoauthapplicationsop.py index 2e0a53d0..324fdd2d 100644 --- a/src/clerk_backend_api/models/listoauthapplicationsop.py +++ b/src/clerk_backend_api/models/listoauthapplicationsop.py @@ -27,7 +27,10 @@ class ListOAuthApplicationsRequestTypedDict(TypedDict): if you pass `order_by=name&order_by=created_at`, we will consider only the first `order_by` parameter, which is `name`. The `created_at` parameter will be ignored in this case. """ name_query: NotRequired[str] - r"""Returns OAuth applications with names that match the given query, via case-insensitive partial match.""" + r"""Returns OAuth applications with names that match the given query, via case-insensitive partial match. + Also returns the OAuth application whose `client_id` is exactly the given query, which is useful for + resolving a `client_id` to the OAuth application `id` required by the read, update and delete endpoints. + """ class ListOAuthApplicationsRequest(BaseModel): @@ -64,7 +67,10 @@ class ListOAuthApplicationsRequest(BaseModel): Optional[str], FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), ] = None - r"""Returns OAuth applications with names that match the given query, via case-insensitive partial match.""" + r"""Returns OAuth applications with names that match the given query, via case-insensitive partial match. + Also returns the OAuth application whose `client_id` is exactly the given query, which is useful for + resolving a `client_id` to the OAuth application `id` required by the read, update and delete endpoints. + """ @model_serializer(mode="wrap") def serialize_model(self, handler): diff --git a/src/clerk_backend_api/models/listscimgrouprolemappingsop.py b/src/clerk_backend_api/models/listscimgrouprolemappingsop.py index 333ad383..629cd47e 100644 --- a/src/clerk_backend_api/models/listscimgrouprolemappingsop.py +++ b/src/clerk_backend_api/models/listscimgrouprolemappingsop.py @@ -8,11 +8,11 @@ class ListSCIMGroupRoleMappingsRequestTypedDict(TypedDict): scim_directory_id: str - r"""The ID of the SCIM directory.""" + r"""The ID of the directory.""" class ListSCIMGroupRoleMappingsRequest(BaseModel): scim_directory_id: Annotated[ str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) ] - r"""The ID of the SCIM directory.""" + r"""The ID of the directory.""" diff --git a/src/clerk_backend_api/models/listuserbiometriccredentialsop.py b/src/clerk_backend_api/models/listuserbiometriccredentialsop.py new file mode 100644 index 00000000..b9e23266 --- /dev/null +++ b/src/clerk_backend_api/models/listuserbiometriccredentialsop.py @@ -0,0 +1,18 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import BaseModel +from clerk_backend_api.utils import FieldMetadata, PathParamMetadata +from typing_extensions import Annotated, TypedDict + + +class ListUserBiometricCredentialsRequestTypedDict(TypedDict): + user_id: str + r"""The ID of the user whose biometric credentials are returned""" + + +class ListUserBiometricCredentialsRequest(BaseModel): + user_id: Annotated[ + str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) + ] + r"""The ID of the user whose biometric credentials are returned""" diff --git a/src/clerk_backend_api/models/oauthapplication.py b/src/clerk_backend_api/models/oauthapplication.py index c899f814..caba826b 100644 --- a/src/clerk_backend_api/models/oauthapplication.py +++ b/src/clerk_backend_api/models/oauthapplication.py @@ -24,8 +24,12 @@ class OAuthApplicationTypedDict(TypedDict): dynamically_registered: bool consent_screen_enabled: bool pkce_required: bool + device_authorization_grant_enabled: bool public: bool scopes: str + r"""The complete scope ceiling for the OAuth application, as a space-delimited list of built-in and assigned custom scope keys. + + """ redirect_uris: List[str] callback_url: str r"""Deprecated: Use redirect_uris instead. @@ -67,9 +71,14 @@ class OAuthApplication(BaseModel): pkce_required: bool + device_authorization_grant_enabled: bool + public: bool scopes: str + r"""The complete scope ceiling for the OAuth application, as a space-delimited list of built-in and assigned custom scope keys. + + """ redirect_uris: List[str] diff --git a/src/clerk_backend_api/models/oauthapplicationsettings.py b/src/clerk_backend_api/models/oauthapplicationsettings.py index 89c03b7d..253532c7 100644 --- a/src/clerk_backend_api/models/oauthapplicationsettings.py +++ b/src/clerk_backend_api/models/oauthapplicationsettings.py @@ -22,9 +22,15 @@ class OAuthApplicationSettingsTypedDict(TypedDict): dynamic_oauth_client_registration: bool r"""Whether dynamic OAuth client registration is enabled for the instance (RFC 7591).""" default_scopes: Nullable[List[str]] - r"""Default scopes.""" + r"""Default scopes assigned when a dynamically registered or first-contact CIMD client omits `scope`. Contains built-in keys and custom catalog keys. Null means Clerk-provided defaults. `advertised` does not affect eligibility. An empty input array is stored and returned as null. + + """ oauth_jwt_access_tokens: bool r"""Whether OAuth JWT access tokens are enabled for the instance (disabled indicates opaque access tokens).""" + aud_claim_enabled: bool + r"""Whether OAuth access tokens can include an aud claim derived from the RFC 8707 resource parameter.""" + pkce_required: bool + r"""Whether all new OAuth authorization-code requests must use PKCE with the S256 challenge method.""" client_id_metadata_documents_advertised: bool r"""Whether the instance advertises support for Client ID Metadata Documents in its OAuth authorization server metadata.""" client_id_metadata_documents_only_allow_pre_registered_clients: bool @@ -43,11 +49,19 @@ class OAuthApplicationSettings(BaseModel): r"""Whether dynamic OAuth client registration is enabled for the instance (RFC 7591).""" default_scopes: Nullable[List[str]] - r"""Default scopes.""" + r"""Default scopes assigned when a dynamically registered or first-contact CIMD client omits `scope`. Contains built-in keys and custom catalog keys. Null means Clerk-provided defaults. `advertised` does not affect eligibility. An empty input array is stored and returned as null. + + """ oauth_jwt_access_tokens: bool r"""Whether OAuth JWT access tokens are enabled for the instance (disabled indicates opaque access tokens).""" + aud_claim_enabled: bool + r"""Whether OAuth access tokens can include an aud claim derived from the RFC 8707 resource parameter.""" + + pkce_required: bool + r"""Whether all new OAuth authorization-code requests must use PKCE with the S256 challenge method.""" + client_id_metadata_documents_advertised: bool r"""Whether the instance advertises support for Client ID Metadata Documents in its OAuth authorization server metadata.""" diff --git a/src/clerk_backend_api/models/oauthapplicationwithsecret.py b/src/clerk_backend_api/models/oauthapplicationwithsecret.py index 5d7c9a28..64522e2a 100644 --- a/src/clerk_backend_api/models/oauthapplicationwithsecret.py +++ b/src/clerk_backend_api/models/oauthapplicationwithsecret.py @@ -24,8 +24,12 @@ class OAuthApplicationWithSecretTypedDict(TypedDict): dynamically_registered: bool consent_screen_enabled: bool pkce_required: bool + device_authorization_grant_enabled: bool public: bool scopes: str + r"""The complete scope ceiling for the OAuth application, as a space-delimited list of built-in and assigned custom scope keys. + + """ redirect_uris: List[str] callback_url: str r"""Deprecated: Use redirect_uris instead. @@ -71,9 +75,14 @@ class OAuthApplicationWithSecret(BaseModel): pkce_required: bool + device_authorization_grant_enabled: bool + public: bool scopes: str + r"""The complete scope ceiling for the OAuth application, as a space-delimited list of built-in and assigned custom scope keys. + + """ redirect_uris: List[str] diff --git a/src/clerk_backend_api/models/organization.py b/src/clerk_backend_api/models/organization.py index e14ddfc9..e8d4d69e 100644 --- a/src/clerk_backend_api/models/organization.py +++ b/src/clerk_backend_api/models/organization.py @@ -39,6 +39,10 @@ class OrganizationTypedDict(TypedDict): members_count: NotRequired[int] missing_member_with_elevated_permissions: NotRequired[bool] pending_invitations_count: NotRequired[int] + self_serve_sso_enabled: NotRequired[Nullable[bool]] + r"""Whether this organization can configure self-serve enterprise SSO. + + """ private_metadata: NotRequired[Dict[str, Any]] created_by: NotRequired[str] last_active_at: NotRequired[int] @@ -86,6 +90,11 @@ class Organization(BaseModel): pending_invitations_count: Optional[int] = None + self_serve_sso_enabled: OptionalNullable[bool] = UNSET + r"""Whether this organization can configure self-serve enterprise SSO. + + """ + private_metadata: Optional[Dict[str, Any]] = None created_by: Optional[str] = None @@ -108,13 +117,14 @@ def serialize_model(self, handler): "members_count", "missing_member_with_elevated_permissions", "pending_invitations_count", + "self_serve_sso_enabled", "private_metadata", "created_by", "last_active_at", "role_set_key", ] ) - nullable_fields = set(["role_set_key"]) + nullable_fields = set(["self_serve_sso_enabled", "role_set_key"]) serialized = handler(self) m = {} diff --git a/src/clerk_backend_api/models/organizationmembership.py b/src/clerk_backend_api/models/organizationmembership.py index fb125573..54b2b530 100644 --- a/src/clerk_backend_api/models/organizationmembership.py +++ b/src/clerk_backend_api/models/organizationmembership.py @@ -49,6 +49,10 @@ class OrganizationMembershipOrganizationTypedDict(TypedDict): members_count: NotRequired[int] missing_member_with_elevated_permissions: NotRequired[bool] pending_invitations_count: NotRequired[int] + self_serve_sso_enabled: NotRequired[Nullable[bool]] + r"""Whether this organization can configure self-serve enterprise SSO. + + """ private_metadata: NotRequired[Dict[str, Any]] created_by: NotRequired[str] last_active_at: NotRequired[int] @@ -96,6 +100,11 @@ class OrganizationMembershipOrganization(BaseModel): pending_invitations_count: Optional[int] = None + self_serve_sso_enabled: OptionalNullable[bool] = UNSET + r"""Whether this organization can configure self-serve enterprise SSO. + + """ + private_metadata: Optional[Dict[str, Any]] = None created_by: Optional[str] = None @@ -118,13 +127,14 @@ def serialize_model(self, handler): "members_count", "missing_member_with_elevated_permissions", "pending_invitations_count", + "self_serve_sso_enabled", "private_metadata", "created_by", "last_active_at", "role_set_key", ] ) - nullable_fields = set(["role_set_key"]) + nullable_fields = set(["self_serve_sso_enabled", "role_set_key"]) serialized = handler(self) m = {} diff --git a/src/clerk_backend_api/models/organizationwithlogo.py b/src/clerk_backend_api/models/organizationwithlogo.py index 4d407070..51d855db 100644 --- a/src/clerk_backend_api/models/organizationwithlogo.py +++ b/src/clerk_backend_api/models/organizationwithlogo.py @@ -40,6 +40,10 @@ class OrganizationWithLogoTypedDict(TypedDict): members_count: NotRequired[int] missing_member_with_elevated_permissions: NotRequired[bool] pending_invitations_count: NotRequired[int] + self_serve_sso_enabled: NotRequired[Nullable[bool]] + r"""Whether this organization can configure self-serve enterprise SSO. + + """ private_metadata: NotRequired[Dict[str, Any]] created_by: NotRequired[str] last_active_at: NotRequired[int] @@ -88,6 +92,11 @@ class OrganizationWithLogo(BaseModel): pending_invitations_count: Optional[int] = None + self_serve_sso_enabled: OptionalNullable[bool] = UNSET + r"""Whether this organization can configure self-serve enterprise SSO. + + """ + private_metadata: Optional[Dict[str, Any]] = None created_by: Optional[str] = None @@ -116,6 +125,7 @@ def serialize_model(self, handler): "members_count", "missing_member_with_elevated_permissions", "pending_invitations_count", + "self_serve_sso_enabled", "private_metadata", "created_by", "last_active_at", @@ -123,7 +133,7 @@ def serialize_model(self, handler): "logo_url", ] ) - nullable_fields = set(["role_set_key"]) + nullable_fields = set(["self_serve_sso_enabled", "role_set_key"]) serialized = handler(self) m = {} diff --git a/src/clerk_backend_api/models/removebillingsubscriptionitemdiscountop.py b/src/clerk_backend_api/models/removebillingsubscriptionitemdiscountop.py new file mode 100644 index 00000000..3c1b85bd --- /dev/null +++ b/src/clerk_backend_api/models/removebillingsubscriptionitemdiscountop.py @@ -0,0 +1,25 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import BaseModel +from clerk_backend_api.utils import FieldMetadata, PathParamMetadata +from typing_extensions import Annotated, TypedDict + + +class RemoveBillingSubscriptionItemDiscountRequestTypedDict(TypedDict): + subscription_item_id: str + r"""The ID of the subscription item to remove the discount from""" + discount_id: str + r"""The ID of the discount to remove""" + + +class RemoveBillingSubscriptionItemDiscountRequest(BaseModel): + subscription_item_id: Annotated[ + str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) + ] + r"""The ID of the subscription item to remove the discount from""" + + discount_id: Annotated[ + str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) + ] + r"""The ID of the discount to remove""" diff --git a/src/clerk_backend_api/models/replacedirectorygrouprolemappingsop.py b/src/clerk_backend_api/models/replacedirectorygrouprolemappingsop.py new file mode 100644 index 00000000..0161623a --- /dev/null +++ b/src/clerk_backend_api/models/replacedirectorygrouprolemappingsop.py @@ -0,0 +1,72 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import BaseModel, UNSET_SENTINEL +from clerk_backend_api.utils import FieldMetadata, PathParamMetadata, RequestMetadata +from pydantic import model_serializer +from typing import List, Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +class ReplaceDirectoryGroupRoleMappingsMappingsTypedDict(TypedDict): + role_id: str + r"""The ID of the organization role to assign to members of the group.""" + directory_group_id: NotRequired[str] + r"""The group ID from the identity provider. Exactly one of `directory_group_id` or `scim_group_id` is required.""" + scim_group_id: NotRequired[str] + r"""The legacy name for `directory_group_id`. Send either one, or both with the same value; sending both with different values is rejected.""" + + +class ReplaceDirectoryGroupRoleMappingsMappings(BaseModel): + role_id: str + r"""The ID of the organization role to assign to members of the group.""" + + directory_group_id: Optional[str] = None + r"""The group ID from the identity provider. Exactly one of `directory_group_id` or `scim_group_id` is required.""" + + scim_group_id: Optional[str] = None + r"""The legacy name for `directory_group_id`. Send either one, or both with the same value; sending both with different values is rejected.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["directory_group_id", "scim_group_id"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m + + +class ReplaceDirectoryGroupRoleMappingsRequestBodyTypedDict(TypedDict): + mappings: List[ReplaceDirectoryGroupRoleMappingsMappingsTypedDict] + r"""The desired set of mappings. Array order sets precedence (1-indexed). An empty array clears all mappings.""" + + +class ReplaceDirectoryGroupRoleMappingsRequestBody(BaseModel): + mappings: List[ReplaceDirectoryGroupRoleMappingsMappings] + r"""The desired set of mappings. Array order sets precedence (1-indexed). An empty array clears all mappings.""" + + +class ReplaceDirectoryGroupRoleMappingsRequestTypedDict(TypedDict): + directory_id: str + r"""The ID of the directory.""" + request_body: ReplaceDirectoryGroupRoleMappingsRequestBodyTypedDict + + +class ReplaceDirectoryGroupRoleMappingsRequest(BaseModel): + directory_id: Annotated[ + str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) + ] + r"""The ID of the directory.""" + + request_body: Annotated[ + ReplaceDirectoryGroupRoleMappingsRequestBody, + FieldMetadata(request=RequestMetadata(media_type="application/json")), + ] diff --git a/src/clerk_backend_api/models/replacescimgrouprolemappingsop.py b/src/clerk_backend_api/models/replacescimgrouprolemappingsop.py index 391d820d..8bc063d1 100644 --- a/src/clerk_backend_api/models/replacescimgrouprolemappingsop.py +++ b/src/clerk_backend_api/models/replacescimgrouprolemappingsop.py @@ -34,7 +34,7 @@ class ReplaceSCIMGroupRoleMappingsRequestBody(BaseModel): class ReplaceSCIMGroupRoleMappingsRequestTypedDict(TypedDict): scim_directory_id: str - r"""The ID of the SCIM directory.""" + r"""The ID of the directory.""" request_body: ReplaceSCIMGroupRoleMappingsRequestBodyTypedDict @@ -42,7 +42,7 @@ class ReplaceSCIMGroupRoleMappingsRequest(BaseModel): scim_directory_id: Annotated[ str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) ] - r"""The ID of the SCIM directory.""" + r"""The ID of the directory.""" request_body: Annotated[ ReplaceSCIMGroupRoleMappingsRequestBody, diff --git a/src/clerk_backend_api/models/revokeuserbiometriccredentialop.py b/src/clerk_backend_api/models/revokeuserbiometriccredentialop.py new file mode 100644 index 00000000..f16ebeed --- /dev/null +++ b/src/clerk_backend_api/models/revokeuserbiometriccredentialop.py @@ -0,0 +1,25 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import BaseModel +from clerk_backend_api.utils import FieldMetadata, PathParamMetadata +from typing_extensions import Annotated, TypedDict + + +class RevokeUserBiometricCredentialRequestTypedDict(TypedDict): + user_id: str + r"""The ID of the user that owns the biometric credential""" + biometric_credential_id: str + r"""The ID of the biometric credential to revoke""" + + +class RevokeUserBiometricCredentialRequest(BaseModel): + user_id: Annotated[ + str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) + ] + r"""The ID of the user that owns the biometric credential""" + + biometric_credential_id: Annotated[ + str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) + ] + r"""The ID of the biometric credential to revoke""" diff --git a/src/clerk_backend_api/models/rotatedirectoryapikeyop.py b/src/clerk_backend_api/models/rotatedirectoryapikeyop.py new file mode 100644 index 00000000..fe873644 --- /dev/null +++ b/src/clerk_backend_api/models/rotatedirectoryapikeyop.py @@ -0,0 +1,18 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import BaseModel +from clerk_backend_api.utils import FieldMetadata, PathParamMetadata +from typing_extensions import Annotated, TypedDict + + +class RotateDirectoryAPIKeyRequestTypedDict(TypedDict): + directory_id: str + r"""The ID of the directory whose API key to rotate""" + + +class RotateDirectoryAPIKeyRequest(BaseModel): + directory_id: Annotated[ + str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) + ] + r"""The ID of the directory whose API key to rotate""" diff --git a/src/clerk_backend_api/models/rotatescimdirectoryapikeyop.py b/src/clerk_backend_api/models/rotatescimdirectoryapikeyop.py index df89bba4..d58a4574 100644 --- a/src/clerk_backend_api/models/rotatescimdirectoryapikeyop.py +++ b/src/clerk_backend_api/models/rotatescimdirectoryapikeyop.py @@ -8,11 +8,11 @@ class RotateSCIMDirectoryAPIKeyRequestTypedDict(TypedDict): scim_directory_id: str - r"""The ID of the SCIM directory whose API key to rotate""" + r"""The ID of the directory whose API key to rotate""" class RotateSCIMDirectoryAPIKeyRequest(BaseModel): scim_directory_id: Annotated[ str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) ] - r"""The ID of the SCIM directory whose API key to rotate""" + r"""The ID of the directory whose API key to rotate""" diff --git a/src/clerk_backend_api/models/scimdirectory.py b/src/clerk_backend_api/models/scimdirectory.py index c029e660..e90fca0c 100644 --- a/src/clerk_backend_api/models/scimdirectory.py +++ b/src/clerk_backend_api/models/scimdirectory.py @@ -29,6 +29,8 @@ class SCIMDirectoryCustomAttributesTypedDict(TypedDict): r"""Path to extract the attribute value from SSO claims (SAML assertions or OIDC claims)""" scim_path: NotRequired[str] r"""GJSON path to extract the attribute value from SCIM user resources""" + directory_path: NotRequired[str] + r"""GJSON path to extract the attribute value from directory sync user resources. Same value as `scim_path`.""" multi_valued: NotRequired[bool] r"""When true, the attribute supports multiple values; values from the IdP are written to public_metadata as an array. Defaults to false.""" @@ -46,12 +48,17 @@ class SCIMDirectoryCustomAttributes(BaseModel): scim_path: Optional[str] = None r"""GJSON path to extract the attribute value from SCIM user resources""" + directory_path: Optional[str] = None + r"""GJSON path to extract the attribute value from directory sync user resources. Same value as `scim_path`.""" + multi_valued: Optional[bool] = None r"""When true, the attribute supports multiple values; values from the IdP are written to public_metadata as an array. Defaults to false.""" @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = set(["name", "key", "sso_path", "scim_path", "multi_valued"]) + optional_fields = set( + ["name", "key", "sso_path", "scim_path", "directory_path", "multi_valued"] + ) serialized = handler(self) m = {} @@ -67,28 +74,28 @@ def serialize_model(self, handler): class SCIMDirectoryTypedDict(TypedDict): - r"""A SCIM directory configuration for provisioning users via SCIM protocol.""" + r"""A directory configuration for provisioning users via SCIM protocol.""" object: SCIMDirectoryObject r"""String representing the object's type. Always \"scim_directory\".""" id: str - r"""Unique identifier for the SCIM directory.""" + r"""Unique identifier for the directory.""" name: str - r"""A human-friendly name for the SCIM directory.""" + r"""A human-friendly name for the directory.""" endpoint_url: str r"""The SCIM endpoint URL for this directory.""" provider: str - r"""The identity provider for this SCIM directory.""" + r"""The identity provider for this directory.""" enabled: bool - r"""Whether the SCIM directory is enabled.""" + r"""Whether the directory is enabled.""" group_role_mapping_enabled: bool - r"""Whether group-to-role mapping is enabled for this SCIM directory.""" + r"""Whether group-to-role mapping is enabled for this directory.""" attribute_mapping: Dict[str, str] r"""Mapping of user attributes to the SCIM attribute paths they are extracted from.""" created_at: int - r"""Unix timestamp when the SCIM directory was created.""" + r"""Unix timestamp when the directory was created.""" updated_at: int - r"""Unix timestamp when the SCIM directory was last updated.""" + r"""Unix timestamp when the directory was last updated.""" enterprise_connection_id: NotRequired[Nullable[str]] r"""The ID of the associated enterprise connection.""" custom_attributes: NotRequired[List[SCIMDirectoryCustomAttributesTypedDict]] @@ -98,37 +105,37 @@ class SCIMDirectoryTypedDict(TypedDict): class SCIMDirectory(BaseModel): - r"""A SCIM directory configuration for provisioning users via SCIM protocol.""" + r"""A directory configuration for provisioning users via SCIM protocol.""" object: SCIMDirectoryObject r"""String representing the object's type. Always \"scim_directory\".""" id: str - r"""Unique identifier for the SCIM directory.""" + r"""Unique identifier for the directory.""" name: str - r"""A human-friendly name for the SCIM directory.""" + r"""A human-friendly name for the directory.""" endpoint_url: str r"""The SCIM endpoint URL for this directory.""" provider: str - r"""The identity provider for this SCIM directory.""" + r"""The identity provider for this directory.""" enabled: bool - r"""Whether the SCIM directory is enabled.""" + r"""Whether the directory is enabled.""" group_role_mapping_enabled: bool - r"""Whether group-to-role mapping is enabled for this SCIM directory.""" + r"""Whether group-to-role mapping is enabled for this directory.""" attribute_mapping: Dict[str, str] r"""Mapping of user attributes to the SCIM attribute paths they are extracted from.""" created_at: int - r"""Unix timestamp when the SCIM directory was created.""" + r"""Unix timestamp when the directory was created.""" updated_at: int - r"""Unix timestamp when the SCIM directory was last updated.""" + r"""Unix timestamp when the directory was last updated.""" enterprise_connection_id: OptionalNullable[str] = UNSET r"""The ID of the associated enterprise connection.""" diff --git a/src/clerk_backend_api/models/scimdirectory_list.py b/src/clerk_backend_api/models/scimdirectory_list.py index 93dd6031..36e76de8 100644 --- a/src/clerk_backend_api/models/scimdirectory_list.py +++ b/src/clerk_backend_api/models/scimdirectory_list.py @@ -8,17 +8,17 @@ class SCIMDirectoryListTypedDict(TypedDict): - r"""A list of SCIM directories""" + r"""A list of directories""" data: List[SCIMDirectoryTypedDict] total_count: int - r"""Total number of SCIM directories.""" + r"""Total number of directories.""" class SCIMDirectoryList(BaseModel): - r"""A list of SCIM directories""" + r"""A list of directories""" data: List[SCIMDirectory] total_count: int - r"""Total number of SCIM directories.""" + r"""Total number of directories.""" diff --git a/src/clerk_backend_api/models/scimgrouprolemapping.py b/src/clerk_backend_api/models/scimgrouprolemapping.py index 3093d43d..8966fa9d 100644 --- a/src/clerk_backend_api/models/scimgrouprolemapping.py +++ b/src/clerk_backend_api/models/scimgrouprolemapping.py @@ -23,11 +23,17 @@ class SCIMGroupRoleMappingTypedDict(TypedDict): id: str r"""Unique identifier for the SCIM group role mapping.""" scim_directory_id: str - r"""The ID of the SCIM directory this mapping belongs to.""" + r"""The ID of the directory this mapping belongs to.""" + directory_id: str + r"""The ID of the directory this mapping belongs to. Same value as `scim_directory_id`.""" scim_group_id: str r"""The SCIM group ID from the identity provider.""" + directory_group_id: str + r"""The group ID from the identity provider. Same value as `scim_group_id`.""" scim_group_display_name: str r"""The display name of the SCIM group, as reported by the identity provider.""" + directory_group_display_name: str + r"""The display name of the group, as reported by the identity provider. Same value as `scim_group_display_name`.""" precedence: int r"""Mapping precedence, starting at 1. Lower values take priority when a user belongs to multiple mapped groups.""" created_at: int @@ -47,14 +53,23 @@ class SCIMGroupRoleMapping(BaseModel): r"""Unique identifier for the SCIM group role mapping.""" scim_directory_id: str - r"""The ID of the SCIM directory this mapping belongs to.""" + r"""The ID of the directory this mapping belongs to.""" + + directory_id: str + r"""The ID of the directory this mapping belongs to. Same value as `scim_directory_id`.""" scim_group_id: str r"""The SCIM group ID from the identity provider.""" + directory_group_id: str + r"""The group ID from the identity provider. Same value as `scim_group_id`.""" + scim_group_display_name: str r"""The display name of the SCIM group, as reported by the identity provider.""" + directory_group_display_name: str + r"""The display name of the group, as reported by the identity provider. Same value as `scim_group_display_name`.""" + precedence: int r"""Mapping precedence, starting at 1. Lower values take priority when a user belongs to multiple mapped groups.""" diff --git a/src/clerk_backend_api/models/updatedirectoryop.py b/src/clerk_backend_api/models/updatedirectoryop.py new file mode 100644 index 00000000..2cc9617f --- /dev/null +++ b/src/clerk_backend_api/models/updatedirectoryop.py @@ -0,0 +1,100 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import BaseModel, Nullable, UNSET_SENTINEL +from clerk_backend_api.utils import FieldMetadata, PathParamMetadata, RequestMetadata +from pydantic import model_serializer +from typing import Dict, Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +class UpdateDirectoryRequestBodyTypedDict(TypedDict): + name: NotRequired[str] + r"""A human-friendly name for the directory.""" + enabled: NotRequired[bool] + r"""Whether the directory is enabled.""" + provider: NotRequired[str] + r"""The identity provider for this directory.""" + attribute_mapping: NotRequired[Dict[str, Nullable[str]]] + r"""Attribute-to-directory-path entries to merge into the directory's attribute mapping. + Set a key to `null` to remove it from the mapping. + """ + group_role_mapping_enabled: NotRequired[bool] + r"""Whether group-to-role mapping is enabled for this directory.""" + + +class UpdateDirectoryRequestBody(BaseModel): + name: Optional[str] = None + r"""A human-friendly name for the directory.""" + + enabled: Optional[bool] = None + r"""Whether the directory is enabled.""" + + provider: Optional[str] = None + r"""The identity provider for this directory.""" + + attribute_mapping: Optional[Dict[str, Nullable[str]]] = None + r"""Attribute-to-directory-path entries to merge into the directory's attribute mapping. + Set a key to `null` to remove it from the mapping. + """ + + group_role_mapping_enabled: Optional[bool] = None + r"""Whether group-to-role mapping is enabled for this directory.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set( + [ + "name", + "enabled", + "provider", + "attribute_mapping", + "group_role_mapping_enabled", + ] + ) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m + + +class UpdateDirectoryRequestTypedDict(TypedDict): + directory_id: str + r"""The ID of the directory to update""" + request_body: NotRequired[UpdateDirectoryRequestBodyTypedDict] + + +class UpdateDirectoryRequest(BaseModel): + directory_id: Annotated[ + str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) + ] + r"""The ID of the directory to update""" + + request_body: Annotated[ + Optional[UpdateDirectoryRequestBody], + FieldMetadata(request=RequestMetadata(media_type="application/json")), + ] = None + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["RequestBody"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/clerk_backend_api/models/updateenterpriseconnectionop.py b/src/clerk_backend_api/models/updateenterpriseconnectionop.py index 00d43d63..aa90b1e5 100644 --- a/src/clerk_backend_api/models/updateenterpriseconnectionop.py +++ b/src/clerk_backend_api/models/updateenterpriseconnectionop.py @@ -321,6 +321,8 @@ class UpdateEnterpriseConnectionCustomAttributesTypedDict(TypedDict): r"""Path to extract the attribute value from SSO claims""" scim_path: NotRequired[str] r"""GJSON path to extract the attribute value from SCIM user resources""" + directory_path: NotRequired[str] + r"""The new name for `scim_path`. Send either one, or both with the same value; sending both with different values is rejected.""" multi_valued: NotRequired[bool] r"""When true, the attribute supports multiple values; values from the IdP are written to public_metadata as an array. Defaults to false.""" @@ -338,12 +340,17 @@ class UpdateEnterpriseConnectionCustomAttributes(BaseModel): scim_path: Optional[str] = None r"""GJSON path to extract the attribute value from SCIM user resources""" + directory_path: Optional[str] = None + r"""The new name for `scim_path`. Send either one, or both with the same value; sending both with different values is rejected.""" + multi_valued: Optional[bool] = None r"""When true, the attribute supports multiple values; values from the IdP are written to public_metadata as an array. Defaults to false.""" @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = set(["sso_path", "scim_path", "multi_valued"]) + optional_fields = set( + ["sso_path", "scim_path", "directory_path", "multi_valued"] + ) serialized = handler(self) m = {} diff --git a/src/clerk_backend_api/models/updateinstanceoauthapplicationsettingsop.py b/src/clerk_backend_api/models/updateinstanceoauthapplicationsettingsop.py index 88c2cb54..77880528 100644 --- a/src/clerk_backend_api/models/updateinstanceoauthapplicationsettingsop.py +++ b/src/clerk_backend_api/models/updateinstanceoauthapplicationsettingsop.py @@ -17,9 +17,15 @@ class UpdateInstanceOAuthApplicationSettingsRequestBodyTypedDict(TypedDict): dynamic_oauth_client_registration: NotRequired[Nullable[bool]] r"""Whether dynamic OAuth client registration is enabled for the instance (RFC 7591).""" default_scopes: NotRequired[Nullable[List[str]]] - r"""Default scopes. Set to null to reset to Clerk-provided defaults.""" + r"""Default scopes assigned when a dynamically registered or first-contact CIMD client omits `scope`. Accepts built-in keys and current custom catalog keys. `advertised` does not affect eligibility. Duplicate keys, unknown keys, and `offline_access` are rejected. An empty array or null resets to Clerk-provided defaults. + + """ oauth_jwt_access_tokens: NotRequired[Nullable[bool]] r"""Whether OAuth JWT access tokens are enabled for the instance (disabled indicates opaque access tokens).""" + aud_claim_enabled: NotRequired[Nullable[bool]] + r"""Whether OAuth access tokens can include an aud claim derived from the RFC 8707 resource parameter.""" + pkce_required: NotRequired[Nullable[bool]] + r"""Whether all new OAuth authorization-code requests must use PKCE with the S256 challenge method.""" client_id_metadata_documents_advertised: NotRequired[Nullable[bool]] r"""Whether the instance advertises support for Client ID Metadata Documents in its OAuth authorization server metadata.""" client_id_metadata_documents_only_allow_pre_registered_clients: NotRequired[ @@ -37,11 +43,19 @@ class UpdateInstanceOAuthApplicationSettingsRequestBody(BaseModel): r"""Whether dynamic OAuth client registration is enabled for the instance (RFC 7591).""" default_scopes: OptionalNullable[List[str]] = UNSET - r"""Default scopes. Set to null to reset to Clerk-provided defaults.""" + r"""Default scopes assigned when a dynamically registered or first-contact CIMD client omits `scope`. Accepts built-in keys and current custom catalog keys. `advertised` does not affect eligibility. Duplicate keys, unknown keys, and `offline_access` are rejected. An empty array or null resets to Clerk-provided defaults. + + """ oauth_jwt_access_tokens: OptionalNullable[bool] = UNSET r"""Whether OAuth JWT access tokens are enabled for the instance (disabled indicates opaque access tokens).""" + aud_claim_enabled: OptionalNullable[bool] = UNSET + r"""Whether OAuth access tokens can include an aud claim derived from the RFC 8707 resource parameter.""" + + pkce_required: OptionalNullable[bool] = UNSET + r"""Whether all new OAuth authorization-code requests must use PKCE with the S256 challenge method.""" + client_id_metadata_documents_advertised: OptionalNullable[bool] = UNSET r"""Whether the instance advertises support for Client ID Metadata Documents in its OAuth authorization server metadata.""" @@ -62,6 +76,8 @@ def serialize_model(self, handler): "dynamic_oauth_client_registration", "default_scopes", "oauth_jwt_access_tokens", + "aud_claim_enabled", + "pkce_required", "client_id_metadata_documents_advertised", "client_id_metadata_documents_only_allow_pre_registered_clients", "client_id_metadata_documents_block_implicitly_allowed_clients", @@ -72,6 +88,8 @@ def serialize_model(self, handler): "dynamic_oauth_client_registration", "default_scopes", "oauth_jwt_access_tokens", + "aud_claim_enabled", + "pkce_required", "client_id_metadata_documents_advertised", "client_id_metadata_documents_only_allow_pre_registered_clients", "client_id_metadata_documents_block_implicitly_allowed_clients", diff --git a/src/clerk_backend_api/models/updateinstanceop.py b/src/clerk_backend_api/models/updateinstanceop.py index 03232421..23e3bbfb 100644 --- a/src/clerk_backend_api/models/updateinstanceop.py +++ b/src/clerk_backend_api/models/updateinstanceop.py @@ -11,7 +11,7 @@ from enum import Enum import pydantic from pydantic import model_serializer -from typing import List, Optional +from typing import List from typing_extensions import Annotated, NotRequired, TypedDict @@ -33,8 +33,16 @@ class UpdateInstanceRequestBodyTypedDict(TypedDict): support_email: NotRequired[Nullable[str]] clerk_js_version: NotRequired[Nullable[str]] development_origin: NotRequired[Nullable[str]] - allowed_origins: NotRequired[List[str]] - r"""For browser-like stacks such as browser extensions, Electron (not officially supported), or Capacitor.js (not officially supported), the instance allowed origins need to be updated with the request origin value. For Chrome extensions popup, background, or service worker pages, the origin is chrome-extension://extension_uuid. For Electron apps the default origin is http://localhost:3000. For Capacitor, the origin is capacitor://localhost.""" + allowed_origins: NotRequired[Nullable[List[str]]] + r"""For browser-like stacks such as browser extensions, Electron (not officially supported), or Capacitor.js (not officially supported), the instance allowed origins need to be updated with the request origin value. For Chrome extensions popup, background, or service worker pages, the origin is chrome-extension://extension_uuid. For Electron apps the default origin is http://localhost:3000. For Capacitor, the origin is capacitor://localhost. + Send an empty array to remove all allowed origins. A null value leaves the current list unchanged. + """ + allowed_subdomains: NotRequired[Nullable[List[str]]] + r"""Subdomains of the instance's own domains that may originate requests while `subdomain_allowlist_enabled` is true. Each entry is either an exact host (`app.example.com`) or a wildcard anchored on a host beneath one of the instance's domains (`*.preview.example.com`), which covers every host under that anchor but not the anchor itself. + Entries are stored folded to lower case with any trailing dot removed, the form the origin check compares against, so entries differing only in those respects are one entry. Entries already stored are not validated again, so a list read back from the instance can always be written again unchanged. Send an empty array to remove all entries. A null value leaves the current list unchanged. Production instances only. + """ + subdomain_allowlist_enabled: NotRequired[Nullable[bool]] + r"""Whether requests from subdomains of the instance's own domains are restricted to `allowed_subdomains`. When false, every subdomain of the instance's domain is accepted. Production instances only.""" cookieless_dev: NotRequired[Nullable[bool]] r"""Whether the instance should operate in cookieless development mode (i.e. without third-party cookies). Deprecated: Please use `url_based_session_syncing` instead. @@ -62,8 +70,18 @@ class UpdateInstanceRequestBody(BaseModel): development_origin: OptionalNullable[str] = UNSET - allowed_origins: Optional[List[str]] = None - r"""For browser-like stacks such as browser extensions, Electron (not officially supported), or Capacitor.js (not officially supported), the instance allowed origins need to be updated with the request origin value. For Chrome extensions popup, background, or service worker pages, the origin is chrome-extension://extension_uuid. For Electron apps the default origin is http://localhost:3000. For Capacitor, the origin is capacitor://localhost.""" + allowed_origins: OptionalNullable[List[str]] = UNSET + r"""For browser-like stacks such as browser extensions, Electron (not officially supported), or Capacitor.js (not officially supported), the instance allowed origins need to be updated with the request origin value. For Chrome extensions popup, background, or service worker pages, the origin is chrome-extension://extension_uuid. For Electron apps the default origin is http://localhost:3000. For Capacitor, the origin is capacitor://localhost. + Send an empty array to remove all allowed origins. A null value leaves the current list unchanged. + """ + + allowed_subdomains: OptionalNullable[List[str]] = UNSET + r"""Subdomains of the instance's own domains that may originate requests while `subdomain_allowlist_enabled` is true. Each entry is either an exact host (`app.example.com`) or a wildcard anchored on a host beneath one of the instance's domains (`*.preview.example.com`), which covers every host under that anchor but not the anchor itself. + Entries are stored folded to lower case with any trailing dot removed, the form the origin check compares against, so entries differing only in those respects are one entry. Entries already stored are not validated again, so a list read back from the instance can always be written again unchanged. Send an empty array to remove all entries. A null value leaves the current list unchanged. Production instances only. + """ + + subdomain_allowlist_enabled: OptionalNullable[bool] = UNSET + r"""Whether requests from subdomains of the instance's own domains are restricted to `allowed_subdomains`. When false, every subdomain of the instance's domain is accepted. Production instances only.""" cookieless_dev: Annotated[ OptionalNullable[bool], @@ -93,6 +111,8 @@ def serialize_model(self, handler): "clerk_js_version", "development_origin", "allowed_origins", + "allowed_subdomains", + "subdomain_allowlist_enabled", "cookieless_dev", "url_based_session_syncing", "preferred_sign_in_strategy_when_password_required", @@ -105,6 +125,9 @@ def serialize_model(self, handler): "support_email", "clerk_js_version", "development_origin", + "allowed_origins", + "allowed_subdomains", + "subdomain_allowlist_enabled", "cookieless_dev", "url_based_session_syncing", "preferred_sign_in_strategy_when_password_required", diff --git a/src/clerk_backend_api/models/updateinstanceprotectop.py b/src/clerk_backend_api/models/updateinstanceprotectop.py index 3ab7addf..a4da73fb 100644 --- a/src/clerk_backend_api/models/updateinstanceprotectop.py +++ b/src/clerk_backend_api/models/updateinstanceprotectop.py @@ -14,11 +14,13 @@ class UpdateInstanceProtectRequestBodyTypedDict(TypedDict): rules_enabled: NotRequired[Nullable[bool]] + r"""Set true to enforce Protect rules on this instance. Set false to stop enforcing and return the instance to its default posture, where traffic is still evaluated in shadow but nothing is blocked. This does not remove the instance from Protect.""" specter_enabled: NotRequired[Nullable[bool]] class UpdateInstanceProtectRequestBody(BaseModel): rules_enabled: OptionalNullable[bool] = UNSET + r"""Set true to enforce Protect rules on this instance. Set false to stop enforcing and return the instance to its default posture, where traffic is still evaluated in shadow but nothing is blocked. This does not remove the instance from Protect.""" specter_enabled: OptionalNullable[bool] = UNSET diff --git a/src/clerk_backend_api/models/updateoauthapplicationop.py b/src/clerk_backend_api/models/updateoauthapplicationop.py index 4775edcd..3d3d25ad 100644 --- a/src/clerk_backend_api/models/updateoauthapplicationop.py +++ b/src/clerk_backend_api/models/updateoauthapplicationop.py @@ -25,11 +25,13 @@ class UpdateOAuthApplicationRequestBodyTypedDict(TypedDict): callback_url: NotRequired[Nullable[str]] r"""The new callback URL of the OAuth application""" scopes: NotRequired[Nullable[str]] - r"""Define the allowed scopes for the new OAuth applications that dictate the user payload of the OAuth user info endpoint. Available scopes are `profile`, `email`, `public_metadata`, `private_metadata`. Provide the requested scopes as a string, separated by spaces.""" + r"""Replace the application's complete built-in and custom scope ceiling. Provide scope keys as a space-delimited string. Custom keys must exist in the instance OAuth scope catalog. Required built-in scopes, such as `offline_access`, must be included in the replacement set, otherwise the request is rejected. Omit this field to leave all scope assignments unchanged.""" consent_screen_enabled: NotRequired[Nullable[bool]] r"""True to enable a consent screen to display in the authentication flow. This cannot be disabled for dynamically registered OAuth Applications.""" pkce_required: NotRequired[Nullable[bool]] r"""True to require the Proof Key of Code Exchange (PKCE) flow.""" + device_authorization_grant_enabled: NotRequired[Nullable[bool]] + r"""True to enable the OAuth Device Authorization Grant for this application. Enabling requires the OAuth Device Authorization Grant feature to be enabled for the instance. Omit this field to leave the setting unchanged.""" public: NotRequired[Nullable[bool]] r"""If true, this client is public and you can use the Proof Key of Code Exchange (PKCE) flow.""" @@ -51,8 +53,8 @@ class UpdateOAuthApplicationRequestBody(BaseModel): ] = UNSET r"""The new callback URL of the OAuth application""" - scopes: OptionalNullable[str] = "profile email" - r"""Define the allowed scopes for the new OAuth applications that dictate the user payload of the OAuth user info endpoint. Available scopes are `profile`, `email`, `public_metadata`, `private_metadata`. Provide the requested scopes as a string, separated by spaces.""" + scopes: OptionalNullable[str] = UNSET + r"""Replace the application's complete built-in and custom scope ceiling. Provide scope keys as a space-delimited string. Custom keys must exist in the instance OAuth scope catalog. Required built-in scopes, such as `offline_access`, must be included in the replacement set, otherwise the request is rejected. Omit this field to leave all scope assignments unchanged.""" consent_screen_enabled: OptionalNullable[bool] = UNSET r"""True to enable a consent screen to display in the authentication flow. This cannot be disabled for dynamically registered OAuth Applications.""" @@ -60,6 +62,9 @@ class UpdateOAuthApplicationRequestBody(BaseModel): pkce_required: OptionalNullable[bool] = UNSET r"""True to require the Proof Key of Code Exchange (PKCE) flow.""" + device_authorization_grant_enabled: OptionalNullable[bool] = UNSET + r"""True to enable the OAuth Device Authorization Grant for this application. Enabling requires the OAuth Device Authorization Grant feature to be enabled for the instance. Omit this field to leave the setting unchanged.""" + public: OptionalNullable[bool] = UNSET r"""If true, this client is public and you can use the Proof Key of Code Exchange (PKCE) flow.""" @@ -73,6 +78,7 @@ def serialize_model(self, handler): "scopes", "consent_screen_enabled", "pkce_required", + "device_authorization_grant_enabled", "public", ] ) @@ -84,6 +90,7 @@ def serialize_model(self, handler): "scopes", "consent_screen_enabled", "pkce_required", + "device_authorization_grant_enabled", "public", ] ) diff --git a/src/clerk_backend_api/models/updateorganizationop.py b/src/clerk_backend_api/models/updateorganizationop.py index c476d5a0..9d619fff 100644 --- a/src/clerk_backend_api/models/updateorganizationop.py +++ b/src/clerk_backend_api/models/updateorganizationop.py @@ -25,6 +25,10 @@ class UpdateOrganizationRequestBodyTypedDict(TypedDict): r"""The maximum number of memberships allowed for this organization""" admin_delete_enabled: NotRequired[Nullable[bool]] r"""If true, an admin can delete this organization with the Frontend API.""" + self_serve_sso_enabled: NotRequired[Nullable[bool]] + r"""Whether this organization can configure self-serve enterprise SSO. + Requires the instance to have the self-serve SSO entitlement enabled. + """ created_at: NotRequired[Nullable[str]] r"""A custom date/time denoting _when_ the organization was created, specified in RFC3339 format (e.g. `2012-10-20T07:15:20.902Z`).""" role_set_key: NotRequired[Nullable[str]] @@ -47,6 +51,11 @@ class UpdateOrganizationRequestBody(BaseModel): admin_delete_enabled: OptionalNullable[bool] = UNSET r"""If true, an admin can delete this organization with the Frontend API.""" + self_serve_sso_enabled: OptionalNullable[bool] = UNSET + r"""Whether this organization can configure self-serve enterprise SSO. + Requires the instance to have the self-serve SSO entitlement enabled. + """ + created_at: OptionalNullable[str] = UNSET r"""A custom date/time denoting _when_ the organization was created, specified in RFC3339 format (e.g. `2012-10-20T07:15:20.902Z`).""" @@ -61,6 +70,7 @@ def serialize_model(self, handler): "slug", "max_allowed_memberships", "admin_delete_enabled", + "self_serve_sso_enabled", "created_at", "role_set_key", ] @@ -71,6 +81,7 @@ def serialize_model(self, handler): "slug", "max_allowed_memberships", "admin_delete_enabled", + "self_serve_sso_enabled", "created_at", "role_set_key", ] diff --git a/src/clerk_backend_api/models/updatescimdirectoryop.py b/src/clerk_backend_api/models/updatescimdirectoryop.py index e6dbae11..d72af65d 100644 --- a/src/clerk_backend_api/models/updatescimdirectoryop.py +++ b/src/clerk_backend_api/models/updatescimdirectoryop.py @@ -10,28 +10,28 @@ class UpdateSCIMDirectoryRequestBodyTypedDict(TypedDict): name: NotRequired[str] - r"""A human-friendly name for the SCIM directory.""" + r"""A human-friendly name for the directory.""" enabled: NotRequired[bool] - r"""Whether the SCIM directory is enabled.""" + r"""Whether the directory is enabled.""" provider: NotRequired[str] - r"""The identity provider for this SCIM directory.""" + r"""The identity provider for this directory.""" attribute_mapping: NotRequired[Dict[str, Nullable[str]]] r"""Attribute-to-SCIM-path entries to merge into the directory's attribute mapping. Set a key to `null` to remove it from the mapping. """ group_role_mapping_enabled: NotRequired[bool] - r"""Whether group-to-role mapping is enabled for this SCIM directory.""" + r"""Whether group-to-role mapping is enabled for this directory.""" class UpdateSCIMDirectoryRequestBody(BaseModel): name: Optional[str] = None - r"""A human-friendly name for the SCIM directory.""" + r"""A human-friendly name for the directory.""" enabled: Optional[bool] = None - r"""Whether the SCIM directory is enabled.""" + r"""Whether the directory is enabled.""" provider: Optional[str] = None - r"""The identity provider for this SCIM directory.""" + r"""The identity provider for this directory.""" attribute_mapping: Optional[Dict[str, Nullable[str]]] = None r"""Attribute-to-SCIM-path entries to merge into the directory's attribute mapping. @@ -39,7 +39,7 @@ class UpdateSCIMDirectoryRequestBody(BaseModel): """ group_role_mapping_enabled: Optional[bool] = None - r"""Whether group-to-role mapping is enabled for this SCIM directory.""" + r"""Whether group-to-role mapping is enabled for this directory.""" @model_serializer(mode="wrap") def serialize_model(self, handler): @@ -68,7 +68,7 @@ def serialize_model(self, handler): class UpdateSCIMDirectoryRequestTypedDict(TypedDict): scim_directory_id: str - r"""The ID of the SCIM directory to update""" + r"""The ID of the directory to update""" request_body: NotRequired[UpdateSCIMDirectoryRequestBodyTypedDict] @@ -76,7 +76,7 @@ class UpdateSCIMDirectoryRequest(BaseModel): scim_directory_id: Annotated[ str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) ] - r"""The ID of the SCIM directory to update""" + r"""The ID of the directory to update""" request_body: Annotated[ Optional[UpdateSCIMDirectoryRequestBody], diff --git a/src/clerk_backend_api/models/updateuserop.py b/src/clerk_backend_api/models/updateuserop.py index 3d4b370c..548c1ce0 100644 --- a/src/clerk_backend_api/models/updateuserop.py +++ b/src/clerk_backend_api/models/updateuserop.py @@ -88,7 +88,7 @@ class UpdateUserRequestBodyTypedDict(TypedDict): created_at: NotRequired[Nullable[str]] r"""A custom date/time denoting _when_ the user signed up to the application.""" bypass_client_trust: NotRequired[Nullable[bool]] - r"""When set to `true`, the user will bypass client trust checks during sign-in.""" + r"""When set to `true`, the user will bypass Device Trust checks during sign-in.""" class UpdateUserRequestBody(BaseModel): @@ -188,7 +188,7 @@ class UpdateUserRequestBody(BaseModel): r"""A custom date/time denoting _when_ the user signed up to the application.""" bypass_client_trust: OptionalNullable[bool] = UNSET - r"""When set to `true`, the user will bypass client trust checks during sign-in.""" + r"""When set to `true`, the user will bypass Device Trust checks during sign-in.""" @model_serializer(mode="wrap") def serialize_model(self, handler): diff --git a/src/clerk_backend_api/models/user.py b/src/clerk_backend_api/models/user.py index e0021519..0f35be42 100644 --- a/src/clerk_backend_api/models/user.py +++ b/src/clerk_backend_api/models/user.py @@ -36,37 +36,37 @@ class UserObject(str, Enum): class ScimTypedDict(TypedDict): - r"""Metadata describing a user's linkage to a SCIM directory. This object is only delivered on `user.created` and `user.updated` webhook events, and only when the user is provisioned through a SCIM directory. Its absence does not necessarily mean the user is not SCIM-managed.""" + r"""Metadata describing a user's linkage to a directory. This object is only delivered on `user.created` and `user.updated` webhook events, and only when the user is provisioned through a directory. Its absence does not necessarily mean the user is not managed by a directory.""" directory_id: str - r"""The ID of the SCIM directory the user is provisioned from. + r"""The ID of the directory the user is provisioned from. """ external_id: Nullable[str] - r"""The user's external ID as reported by the SCIM directory, if any. + r"""The user's external ID as reported by the directory, if any. """ directory_enabled: NotRequired[bool] - r"""Whether the SCIM directory is currently enabled. Omitted when false. + r"""Whether the directory is currently enabled. Omitted when false. """ class Scim(BaseModel): - r"""Metadata describing a user's linkage to a SCIM directory. This object is only delivered on `user.created` and `user.updated` webhook events, and only when the user is provisioned through a SCIM directory. Its absence does not necessarily mean the user is not SCIM-managed.""" + r"""Metadata describing a user's linkage to a directory. This object is only delivered on `user.created` and `user.updated` webhook events, and only when the user is provisioned through a directory. Its absence does not necessarily mean the user is not managed by a directory.""" directory_id: str - r"""The ID of the SCIM directory the user is provisioned from. + r"""The ID of the directory the user is provisioned from. """ external_id: Nullable[str] - r"""The user's external ID as reported by the SCIM directory, if any. + r"""The user's external ID as reported by the directory, if any. """ directory_enabled: Optional[bool] = None - r"""Whether the SCIM directory is currently enabled. Omitted when false. + r"""Whether the directory is currently enabled. Omitted when false. """ @@ -195,7 +195,7 @@ class UserTypedDict(TypedDict): """ bypass_client_trust: NotRequired[bool] - r"""When set to `true`, the user will bypass client trust checks during sign-in.""" + r"""When set to `true`, the user will bypass Device Trust checks during sign-in.""" scim: NotRequired[Nullable[ScimTypedDict]] @@ -347,7 +347,7 @@ class User(BaseModel): """ bypass_client_trust: Optional[bool] = False - r"""When set to `true`, the user will bypass client trust checks during sign-in.""" + r"""When set to `true`, the user will bypass Device Trust checks during sign-in.""" scim: OptionalNullable[Scim] = UNSET diff --git a/src/clerk_backend_api/oauthapplications_sdk.py b/src/clerk_backend_api/oauthapplications_sdk.py index 769ec712..b07a2035 100644 --- a/src/clerk_backend_api/oauthapplications_sdk.py +++ b/src/clerk_backend_api/oauthapplications_sdk.py @@ -40,6 +40,8 @@ def list( If you don't use `+` or `-`, then `+` is implied. We only support one `order_by` parameter, and if multiple `order_by` parameters are provided, we will only keep the first one. For example, if you pass `order_by=name&order_by=created_at`, we will consider only the first `order_by` parameter, which is `name`. The `created_at` parameter will be ignored in this case. :param name_query: Returns OAuth applications with names that match the given query, via case-insensitive partial match. + Also returns the OAuth application whose `client_id` is exactly the given query, which is useful for + resolving a `client_id` to the OAuth application `id` required by the read, update and delete endpoints. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -152,6 +154,8 @@ async def list_async( If you don't use `+` or `-`, then `+` is implied. We only support one `order_by` parameter, and if multiple `order_by` parameters are provided, we will only keep the first one. For example, if you pass `order_by=name&order_by=created_at`, we will consider only the first `order_by` parameter, which is `name`. The `created_at` parameter will be ignored in this case. :param name_query: Returns OAuth applications with names that match the given query, via case-insensitive partial match. + Also returns the OAuth application whose `client_id` is exactly the given query, which is useful for + resolving a `client_id` to the OAuth application `id` required by the read, update and delete endpoints. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -640,9 +644,10 @@ def update( name: OptionalNullable[str] = UNSET, redirect_uris: OptionalNullable[Iterable[str]] = UNSET, callback_url: OptionalNullable[str] = UNSET, - scopes: OptionalNullable[str] = "profile email", + scopes: OptionalNullable[str] = UNSET, consent_screen_enabled: OptionalNullable[bool] = UNSET, pkce_required: OptionalNullable[bool] = UNSET, + device_authorization_grant_enabled: OptionalNullable[bool] = UNSET, public: OptionalNullable[bool] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, @@ -658,9 +663,10 @@ def update( Max length: 256 :param redirect_uris: An array of redirect URIs of the new OAuth application :param callback_url: The new callback URL of the OAuth application - :param scopes: Define the allowed scopes for the new OAuth applications that dictate the user payload of the OAuth user info endpoint. Available scopes are `profile`, `email`, `public_metadata`, `private_metadata`. Provide the requested scopes as a string, separated by spaces. + :param scopes: Replace the application's complete built-in and custom scope ceiling. Provide scope keys as a space-delimited string. Custom keys must exist in the instance OAuth scope catalog. Required built-in scopes, such as `offline_access`, must be included in the replacement set, otherwise the request is rejected. Omit this field to leave all scope assignments unchanged. :param consent_screen_enabled: True to enable a consent screen to display in the authentication flow. This cannot be disabled for dynamically registered OAuth Applications. :param pkce_required: True to require the Proof Key of Code Exchange (PKCE) flow. + :param device_authorization_grant_enabled: True to enable the OAuth Device Authorization Grant for this application. Enabling requires the OAuth Device Authorization Grant feature to be enabled for the instance. Omit this field to leave the setting unchanged. :param public: If true, this client is public and you can use the Proof Key of Code Exchange (PKCE) flow. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method @@ -688,6 +694,7 @@ def update( scopes=scopes, consent_screen_enabled=consent_screen_enabled, pkce_required=pkce_required, + device_authorization_grant_enabled=device_authorization_grant_enabled, public=public, ), ) @@ -767,9 +774,10 @@ async def update_async( name: OptionalNullable[str] = UNSET, redirect_uris: OptionalNullable[Iterable[str]] = UNSET, callback_url: OptionalNullable[str] = UNSET, - scopes: OptionalNullable[str] = "profile email", + scopes: OptionalNullable[str] = UNSET, consent_screen_enabled: OptionalNullable[bool] = UNSET, pkce_required: OptionalNullable[bool] = UNSET, + device_authorization_grant_enabled: OptionalNullable[bool] = UNSET, public: OptionalNullable[bool] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, @@ -785,9 +793,10 @@ async def update_async( Max length: 256 :param redirect_uris: An array of redirect URIs of the new OAuth application :param callback_url: The new callback URL of the OAuth application - :param scopes: Define the allowed scopes for the new OAuth applications that dictate the user payload of the OAuth user info endpoint. Available scopes are `profile`, `email`, `public_metadata`, `private_metadata`. Provide the requested scopes as a string, separated by spaces. + :param scopes: Replace the application's complete built-in and custom scope ceiling. Provide scope keys as a space-delimited string. Custom keys must exist in the instance OAuth scope catalog. Required built-in scopes, such as `offline_access`, must be included in the replacement set, otherwise the request is rejected. Omit this field to leave all scope assignments unchanged. :param consent_screen_enabled: True to enable a consent screen to display in the authentication flow. This cannot be disabled for dynamically registered OAuth Applications. :param pkce_required: True to require the Proof Key of Code Exchange (PKCE) flow. + :param device_authorization_grant_enabled: True to enable the OAuth Device Authorization Grant for this application. Enabling requires the OAuth Device Authorization Grant feature to be enabled for the instance. Omit this field to leave the setting unchanged. :param public: If true, this client is public and you can use the Proof Key of Code Exchange (PKCE) flow. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method @@ -815,6 +824,7 @@ async def update_async( scopes=scopes, consent_screen_enabled=consent_screen_enabled, pkce_required=pkce_required, + device_authorization_grant_enabled=device_authorization_grant_enabled, public=public, ), ) diff --git a/src/clerk_backend_api/organizations_sdk.py b/src/clerk_backend_api/organizations_sdk.py index 4d649ab1..4694dcac 100644 --- a/src/clerk_backend_api/organizations_sdk.py +++ b/src/clerk_backend_api/organizations_sdk.py @@ -707,6 +707,7 @@ def update( slug: OptionalNullable[str] = UNSET, max_allowed_memberships: OptionalNullable[int] = UNSET, admin_delete_enabled: OptionalNullable[bool] = UNSET, + self_serve_sso_enabled: OptionalNullable[bool] = UNSET, created_at: OptionalNullable[str] = UNSET, role_set_key: OptionalNullable[str] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET, @@ -728,6 +729,8 @@ def update( :param slug: The new slug of the organization, which needs to be unique in the instance :param max_allowed_memberships: The maximum number of memberships allowed for this organization :param admin_delete_enabled: If true, an admin can delete this organization with the Frontend API. + :param self_serve_sso_enabled: Whether this organization can configure self-serve enterprise SSO. + Requires the instance to have the self-serve SSO entitlement enabled. :param created_at: A custom date/time denoting _when_ the organization was created, specified in RFC3339 format (e.g. `2012-10-20T07:15:20.902Z`). :param role_set_key: The key of the [role set](https://clerk.com/docs/guides/organizations/control-access/role-sets) to assign to this organization. :param retries: Override the default retry configuration for this method @@ -752,6 +755,7 @@ def update( slug=slug, max_allowed_memberships=max_allowed_memberships, admin_delete_enabled=admin_delete_enabled, + self_serve_sso_enabled=self_serve_sso_enabled, created_at=created_at, role_set_key=role_set_key, ), @@ -833,6 +837,7 @@ async def update_async( slug: OptionalNullable[str] = UNSET, max_allowed_memberships: OptionalNullable[int] = UNSET, admin_delete_enabled: OptionalNullable[bool] = UNSET, + self_serve_sso_enabled: OptionalNullable[bool] = UNSET, created_at: OptionalNullable[str] = UNSET, role_set_key: OptionalNullable[str] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET, @@ -854,6 +859,8 @@ async def update_async( :param slug: The new slug of the organization, which needs to be unique in the instance :param max_allowed_memberships: The maximum number of memberships allowed for this organization :param admin_delete_enabled: If true, an admin can delete this organization with the Frontend API. + :param self_serve_sso_enabled: Whether this organization can configure self-serve enterprise SSO. + Requires the instance to have the self-serve SSO entitlement enabled. :param created_at: A custom date/time denoting _when_ the organization was created, specified in RFC3339 format (e.g. `2012-10-20T07:15:20.902Z`). :param role_set_key: The key of the [role set](https://clerk.com/docs/guides/organizations/control-access/role-sets) to assign to this organization. :param retries: Override the default retry configuration for this method @@ -878,6 +885,7 @@ async def update_async( slug=slug, max_allowed_memberships=max_allowed_memberships, admin_delete_enabled=admin_delete_enabled, + self_serve_sso_enabled=self_serve_sso_enabled, created_at=created_at, role_set_key=role_set_key, ), diff --git a/src/clerk_backend_api/scimdirectories.py b/src/clerk_backend_api/scimdirectories.py index 220d0026..6f1905db 100644 --- a/src/clerk_backend_api/scimdirectories.py +++ b/src/clerk_backend_api/scimdirectories.py @@ -19,9 +19,9 @@ def list( timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, ) -> models.SCIMDirectoryList: - r"""List all SCIM directories + r"""List all directories - Returns a list of all SCIM directories for the instance. + Returns a list of all directories for the instance. :param limit: Applies a limit to the number of results returned. Can be used for paginating the results together with `offset`. @@ -117,9 +117,9 @@ async def list_async( timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, ) -> models.SCIMDirectoryList: - r"""List all SCIM directories + r"""List all directories - Returns a list of all SCIM directories for the instance. + Returns a list of all directories for the instance. :param limit: Applies a limit to the number of results returned. Can be used for paginating the results together with `offset`. @@ -219,9 +219,9 @@ def create( timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, ) -> models.SCIMDirectory: - r"""Create a SCIM directory + r"""Create a directory - Create a new SCIM directory for the instance. + Create a new directory for the instance. :param request: The request object to send. :param retries: Override the default retry configuration for this method @@ -327,9 +327,9 @@ async def create_async( timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, ) -> models.SCIMDirectory: - r"""Create a SCIM directory + r"""Create a directory - Create a new SCIM directory for the instance. + Create a new directory for the instance. :param request: The request object to send. :param retries: Override the default retry configuration for this method @@ -430,11 +430,11 @@ def get( timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, ) -> models.SCIMDirectory: - r"""Retrieve a SCIM directory + r"""Retrieve a directory - Returns the details of a SCIM directory. + Returns the details of a directory. - :param scim_directory_id: The ID of the SCIM directory to retrieve + :param scim_directory_id: The ID of the directory to retrieve :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -522,11 +522,11 @@ async def get_async( timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, ) -> models.SCIMDirectory: - r"""Retrieve a SCIM directory + r"""Retrieve a directory - Returns the details of a SCIM directory. + Returns the details of a directory. - :param scim_directory_id: The ID of the SCIM directory to retrieve + :param scim_directory_id: The ID of the directory to retrieve :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -619,17 +619,17 @@ def update( timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, ) -> models.SCIMDirectory: - r"""Update a SCIM directory + r"""Update a directory - Updates a SCIM directory. + Updates a directory. - :param scim_directory_id: The ID of the SCIM directory to update - :param name: A human-friendly name for the SCIM directory. - :param enabled: Whether the SCIM directory is enabled. - :param provider: The identity provider for this SCIM directory. + :param scim_directory_id: The ID of the directory to update + :param name: A human-friendly name for the directory. + :param enabled: Whether the directory is enabled. + :param provider: The identity provider for this directory. :param attribute_mapping: Attribute-to-SCIM-path entries to merge into the directory's attribute mapping. Set a key to `null` to remove it from the mapping. - :param group_role_mapping_enabled: Whether group-to-role mapping is enabled for this SCIM directory. + :param group_role_mapping_enabled: Whether group-to-role mapping is enabled for this directory. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -740,17 +740,17 @@ async def update_async( timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, ) -> models.SCIMDirectory: - r"""Update a SCIM directory + r"""Update a directory - Updates a SCIM directory. + Updates a directory. - :param scim_directory_id: The ID of the SCIM directory to update - :param name: A human-friendly name for the SCIM directory. - :param enabled: Whether the SCIM directory is enabled. - :param provider: The identity provider for this SCIM directory. + :param scim_directory_id: The ID of the directory to update + :param name: A human-friendly name for the directory. + :param enabled: Whether the directory is enabled. + :param provider: The identity provider for this directory. :param attribute_mapping: Attribute-to-SCIM-path entries to merge into the directory's attribute mapping. Set a key to `null` to remove it from the mapping. - :param group_role_mapping_enabled: Whether group-to-role mapping is enabled for this SCIM directory. + :param group_role_mapping_enabled: Whether group-to-role mapping is enabled for this directory. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -856,12 +856,12 @@ def delete( timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, ) -> models.DeletedObject: - r"""Delete a SCIM directory + r"""Delete a directory - Deletes a SCIM directory and stops provisioning for it. SCIM requests authenticated + Deletes a directory and stops provisioning for it. SCIM requests authenticated with the directory's API key are rejected afterwards. - :param scim_directory_id: The ID of the SCIM directory to delete + :param scim_directory_id: The ID of the directory to delete :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -949,12 +949,12 @@ async def delete_async( timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, ) -> models.DeletedObject: - r"""Delete a SCIM directory + r"""Delete a directory - Deletes a SCIM directory and stops provisioning for it. SCIM requests authenticated + Deletes a directory and stops provisioning for it. SCIM requests authenticated with the directory's API key are rejected afterwards. - :param scim_directory_id: The ID of the SCIM directory to delete + :param scim_directory_id: The ID of the directory to delete :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -1042,14 +1042,14 @@ def rotate_api_key( timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, ) -> models.SCIMDirectory: - r"""Rotate a SCIM directory's API key + r"""Rotate a directory's API key - Generates a new API key for the SCIM directory and returns it in the `api_key` field. + Generates a new API key for the directory and returns it in the `api_key` field. This is the only way to obtain the key after creation, so make sure to update it in your identity provider. The previous key remains valid for a short grace period before it expires. - :param scim_directory_id: The ID of the SCIM directory whose API key to rotate + :param scim_directory_id: The ID of the directory whose API key to rotate :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -1116,7 +1116,9 @@ def rotate_api_key( response_data: Any = None if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response(models.SCIMDirectory, http_res) - if utils.match_response(http_res, ["401", "403", "404"], "application/json"): + if utils.match_response( + http_res, ["401", "403", "404", "422"], "application/json" + ): response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) raise models.ClerkErrors(response_data, http_res) if utils.match_response(http_res, "4XX", "*"): @@ -1137,14 +1139,14 @@ async def rotate_api_key_async( timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, ) -> models.SCIMDirectory: - r"""Rotate a SCIM directory's API key + r"""Rotate a directory's API key - Generates a new API key for the SCIM directory and returns it in the `api_key` field. + Generates a new API key for the directory and returns it in the `api_key` field. This is the only way to obtain the key after creation, so make sure to update it in your identity provider. The previous key remains valid for a short grace period before it expires. - :param scim_directory_id: The ID of the SCIM directory whose API key to rotate + :param scim_directory_id: The ID of the directory whose API key to rotate :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -1211,7 +1213,9 @@ async def rotate_api_key_async( response_data: Any = None if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response(models.SCIMDirectory, http_res) - if utils.match_response(http_res, ["401", "403", "404"], "application/json"): + if utils.match_response( + http_res, ["401", "403", "404", "422"], "application/json" + ): response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) raise models.ClerkErrors(response_data, http_res) if utils.match_response(http_res, "4XX", "*"): @@ -1234,9 +1238,9 @@ def list_group_role_mappings( ) -> models.SCIMGroupRoleMappingList: r"""List SCIM group role mappings - Returns the list of SCIM group to organization role mappings for a SCIM directory, ordered by precedence. + Returns the list of SCIM group to organization role mappings for a directory, ordered by precedence. - :param scim_directory_id: The ID of the SCIM directory. + :param scim_directory_id: The ID of the directory. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -1326,9 +1330,9 @@ async def list_group_role_mappings_async( ) -> models.SCIMGroupRoleMappingList: r"""List SCIM group role mappings - Returns the list of SCIM group to organization role mappings for a SCIM directory, ordered by precedence. + Returns the list of SCIM group to organization role mappings for a directory, ordered by precedence. - :param scim_directory_id: The ID of the SCIM directory. + :param scim_directory_id: The ID of the directory. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -1421,10 +1425,11 @@ def create_group_role_mapping( ) -> models.SCIMGroupRoleMapping: r"""Create a SCIM group role mapping - Creates a new SCIM group to organization role mapping for a SCIM directory. - Group role mapping must be enabled on the directory. + Creates a new SCIM group to organization role mapping for a directory. + Mappings can be created while group role mapping is disabled on the + directory, but they only take effect once it is enabled. - :param scim_directory_id: The ID of the SCIM directory. + :param scim_directory_id: The ID of the directory. :param scim_group_id: The SCIM group ID from the identity provider. :param role_id: The ID of the organization role to assign to members of the SCIM group. :param precedence: The precedence for this mapping. Lower values take priority when a user belongs @@ -1536,10 +1541,11 @@ async def create_group_role_mapping_async( ) -> models.SCIMGroupRoleMapping: r"""Create a SCIM group role mapping - Creates a new SCIM group to organization role mapping for a SCIM directory. - Group role mapping must be enabled on the directory. + Creates a new SCIM group to organization role mapping for a directory. + Mappings can be created while group role mapping is disabled on the + directory, but they only take effect once it is enabled. - :param scim_directory_id: The ID of the SCIM directory. + :param scim_directory_id: The ID of the directory. :param scim_group_id: The SCIM group ID from the identity provider. :param role_id: The ID of the organization role to assign to members of the SCIM group. :param precedence: The precedence for this mapping. Lower values take priority when a user belongs @@ -1651,10 +1657,11 @@ def replace_group_role_mappings( Replaces the entire set of SCIM group role mappings for a directory. The position of each item in the `mappings` array determines its precedence (the first item gets - precedence 1). Passing an empty array removes all mappings. Group role mapping must be - enabled on the directory. + precedence 1). Passing an empty array removes all mappings. Mappings can be replaced + while group role mapping is disabled on the directory, but they only take effect once + it is enabled. - :param scim_directory_id: The ID of the SCIM directory. + :param scim_directory_id: The ID of the directory. :param mappings: The desired set of mappings. Array order sets precedence (1-indexed). An empty array clears all mappings. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method @@ -1760,10 +1767,11 @@ async def replace_group_role_mappings_async( Replaces the entire set of SCIM group role mappings for a directory. The position of each item in the `mappings` array determines its precedence (the first item gets - precedence 1). Passing an empty array removes all mappings. Group role mapping must be - enabled on the directory. + precedence 1). Passing an empty array removes all mappings. Mappings can be replaced + while group role mapping is disabled on the directory, but they only take effect once + it is enabled. - :param scim_directory_id: The ID of the SCIM directory. + :param scim_directory_id: The ID of the directory. :param mappings: The desired set of mappings. Array order sets precedence (1-indexed). An empty array clears all mappings. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method @@ -1867,10 +1875,11 @@ def delete_group_role_mapping( ) -> models.SCIMGroupRoleMappingDeleted: r"""Delete a SCIM group role mapping - Deletes a single SCIM group role mapping. Group role mapping must be enabled on the - directory. + Deletes a single SCIM group role mapping. Mappings can be deleted while group role + mapping is disabled on the directory, but the change only takes effect once it is + enabled. - :param scim_directory_id: The ID of the SCIM directory. + :param scim_directory_id: The ID of the directory. :param mapping_id: The ID of the SCIM group role mapping to delete. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method @@ -1965,10 +1974,11 @@ async def delete_group_role_mapping_async( ) -> models.SCIMGroupRoleMappingDeleted: r"""Delete a SCIM group role mapping - Deletes a single SCIM group role mapping. Group role mapping must be enabled on the - directory. + Deletes a single SCIM group role mapping. Mappings can be deleted while group role + mapping is disabled on the directory, but the change only takes effect once it is + enabled. - :param scim_directory_id: The ID of the SCIM directory. + :param scim_directory_id: The ID of the directory. :param mapping_id: The ID of the SCIM group role mapping to delete. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method diff --git a/src/clerk_backend_api/sdk.py b/src/clerk_backend_api/sdk.py index 3ec0474b..2e2c8da3 100644 --- a/src/clerk_backend_api/sdk.py +++ b/src/clerk_backend_api/sdk.py @@ -34,6 +34,7 @@ from clerk_backend_api.billing import Billing from clerk_backend_api.blocklistidentifiers_sdk import BlocklistIdentifiersSDK from clerk_backend_api.clients import Clients + from clerk_backend_api.directories import Directories from clerk_backend_api.domains_sdk import DomainsSDK from clerk_backend_api.emailaddresses import EmailAddresses from clerk_backend_api.emailandsmstemplates import EmailAndSmsTemplates @@ -122,6 +123,7 @@ class Clerk(BaseSDK): organization_permissions: "OrganizationPermissions" role_sets: "RoleSetsSDK" scim_directories: "ScimDirectories" + directories: "Directories" admin_portal_link_tokens: "AdminPortalLinkTokens" api_keys: "APIKeys" r"""Endpoints for managing API Keys""" @@ -209,6 +211,7 @@ class Clerk(BaseSDK): ), "role_sets": ("clerk_backend_api.rolesets_sdk", "RoleSetsSDK"), "scim_directories": ("clerk_backend_api.scimdirectories", "ScimDirectories"), + "directories": ("clerk_backend_api.directories", "Directories"), "admin_portal_link_tokens": ( "clerk_backend_api.admin_portal_link_tokens", "AdminPortalLinkTokens", diff --git a/src/clerk_backend_api/users.py b/src/clerk_backend_api/users.py index 86b8cda3..e4b6573f 100644 --- a/src/clerk_backend_api/users.py +++ b/src/clerk_backend_api/users.py @@ -6,6 +6,7 @@ from clerk_backend_api.types import BaseModel, OptionalNullable, UNSET from clerk_backend_api.utils.unmarshal_json_response import unmarshal_json_response from typing import Any, Dict, Iterable, List, Mapping, Optional, Union, cast +from typing_extensions import deprecated class Users(BaseSDK): @@ -25,6 +26,11 @@ def list( Returns a list of all users. The users are returned sorted by creation date, with the newest users appearing first. + To walk more than a few pages, paginate with `starting_after` rather than `offset`. + A cursor page costs the same no matter how far into the list it sits, while a large `offset` + has to walk and discard every row before it, so it gets progressively slower and eventually + times out. Cursor pagination requires the `created_at` ordering, which is the default. + :param request: The request object to send. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method @@ -120,6 +126,11 @@ async def list_async( Returns a list of all users. The users are returned sorted by creation date, with the newest users appearing first. + To walk more than a few pages, paginate with `starting_after` rather than `offset`. + A cursor page costs the same no matter how far into the list it sits, while a large `offset` + has to walk and discard every row before it, so it gets progressively slower and eventually + times out. Cursor pagination requires the `created_at` ordering, which is the default. + :param request: The request object to send. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method @@ -221,6 +232,7 @@ def create( password_hasher: Optional[str] = None, skip_password_checks: OptionalNullable[bool] = UNSET, skip_password_requirement: OptionalNullable[bool] = UNSET, + skip_restriction_checks: OptionalNullable[bool] = UNSET, totp_secret: OptionalNullable[str] = UNSET, backup_codes: Optional[Iterable[str]] = None, public_metadata: Optional[Mapping[str, Any]] = None, @@ -301,6 +313,9 @@ def create( :param skip_password_requirement: When set to `true`, `password` is not required anymore when creating the user and can be omitted. This is useful when you are trying to create a user that doesn't have a password, in an instance that is using passwords. Please note that you cannot use this flag if password is the only way for a user to sign into your instance. + :param skip_restriction_checks: When set to `true`, the instance's restrictions are not applied to this user. + Those settings are the allowlist, the blocklist, blocked disposable email domains and blocked email subaddresses, and they normally reject a matching identifier here just as they do at sign-up. + Use this when your backend is creating a user it already trusts, such as during a migration or from an admin tool. :param totp_secret: In case TOTP is configured on the instance, you can provide the secret to enable it on the newly created user without the need to reset it. Please note that currently the supported options are: * Period: 30 seconds @@ -326,7 +341,7 @@ def create( :param create_organizations_limit: The maximum number of organizations the user can create. 0 means unlimited. :param created_at: A custom date/time denoting _when_ the user signed up to the application, specified in RFC3339 format (e.g. `2012-10-20T07:15:20.902Z`). - :param bypass_client_trust: When set to `true`, the user will bypass client trust checks during sign-in. + :param bypass_client_trust: When set to `true`, the user will bypass Device Trust checks during sign-in. :param banned: When set to `true`, the user is created already banned and cannot sign in. Requires the same plan support as the ban user endpoint. :param locked: When set to `true`, the user is created already locked. @@ -368,6 +383,7 @@ def create( password_hasher=password_hasher, skip_password_checks=skip_password_checks, skip_password_requirement=skip_password_requirement, + skip_restriction_checks=skip_restriction_checks, totp_secret=totp_secret, backup_codes=utils.unmarshal(backup_codes, Optional[List[str]]), public_metadata=utils.unmarshal(public_metadata, Optional[Dict[str, Any]]), @@ -473,6 +489,7 @@ async def create_async( password_hasher: Optional[str] = None, skip_password_checks: OptionalNullable[bool] = UNSET, skip_password_requirement: OptionalNullable[bool] = UNSET, + skip_restriction_checks: OptionalNullable[bool] = UNSET, totp_secret: OptionalNullable[str] = UNSET, backup_codes: Optional[Iterable[str]] = None, public_metadata: Optional[Mapping[str, Any]] = None, @@ -553,6 +570,9 @@ async def create_async( :param skip_password_requirement: When set to `true`, `password` is not required anymore when creating the user and can be omitted. This is useful when you are trying to create a user that doesn't have a password, in an instance that is using passwords. Please note that you cannot use this flag if password is the only way for a user to sign into your instance. + :param skip_restriction_checks: When set to `true`, the instance's restrictions are not applied to this user. + Those settings are the allowlist, the blocklist, blocked disposable email domains and blocked email subaddresses, and they normally reject a matching identifier here just as they do at sign-up. + Use this when your backend is creating a user it already trusts, such as during a migration or from an admin tool. :param totp_secret: In case TOTP is configured on the instance, you can provide the secret to enable it on the newly created user without the need to reset it. Please note that currently the supported options are: * Period: 30 seconds @@ -578,7 +598,7 @@ async def create_async( :param create_organizations_limit: The maximum number of organizations the user can create. 0 means unlimited. :param created_at: A custom date/time denoting _when_ the user signed up to the application, specified in RFC3339 format (e.g. `2012-10-20T07:15:20.902Z`). - :param bypass_client_trust: When set to `true`, the user will bypass client trust checks during sign-in. + :param bypass_client_trust: When set to `true`, the user will bypass Device Trust checks during sign-in. :param banned: When set to `true`, the user is created already banned and cannot sign in. Requires the same plan support as the ban user endpoint. :param locked: When set to `true`, the user is created already locked. @@ -620,6 +640,7 @@ async def create_async( password_hasher=password_hasher, skip_password_checks=skip_password_checks, skip_password_requirement=skip_password_requirement, + skip_restriction_checks=skip_restriction_checks, totp_secret=totp_secret, backup_codes=utils.unmarshal(backup_codes, Optional[List[str]]), public_metadata=utils.unmarshal(public_metadata, Optional[Dict[str, Any]]), @@ -1161,7 +1182,7 @@ def update( :param skip_legal_checks: When set to `true` all legal checks are skipped. :param create_organizations_limit: The maximum number of organizations the user can create. 0 means unlimited. :param created_at: A custom date/time denoting _when_ the user signed up to the application. - :param bypass_client_trust: When set to `true`, the user will bypass client trust checks during sign-in. + :param bypass_client_trust: When set to `true`, the user will bypass Device Trust checks during sign-in. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -1357,7 +1378,7 @@ async def update_async( :param skip_legal_checks: When set to `true` all legal checks are skipped. :param create_organizations_limit: The maximum number of organizations the user can create. 0 means unlimited. :param created_at: A custom date/time denoting _when_ the user signed up to the application. - :param bypass_client_trust: When set to `true`, the user will bypass client trust checks during sign-in. + :param bypass_client_trust: When set to `true`, the user will bypass Device Trust checks during sign-in. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -6191,6 +6212,9 @@ async def delete_passkey_async( raise models.SDKError("Unexpected response received", http_res) + @deprecated( + "warning: ** DEPRECATED ** - This will be removed in a future release, please migrate away from it as soon as possible." + ) def list_trusted_devices( self, *, @@ -6286,6 +6310,9 @@ def list_trusted_devices( raise models.SDKError("Unexpected response received", http_res) + @deprecated( + "warning: ** DEPRECATED ** - This will be removed in a future release, please migrate away from it as soon as possible." + ) async def list_trusted_devices_async( self, *, @@ -6381,6 +6408,9 @@ async def list_trusted_devices_async( raise models.SDKError("Unexpected response received", http_res) + @deprecated( + "warning: ** DEPRECATED ** - This will be removed in a future release, please migrate away from it as soon as possible." + ) def revoke_trusted_device( self, *, @@ -6479,6 +6509,9 @@ def revoke_trusted_device( raise models.SDKError("Unexpected response received", http_res) + @deprecated( + "warning: ** DEPRECATED ** - This will be removed in a future release, please migrate away from it as soon as possible." + ) async def revoke_trusted_device_async( self, *, @@ -6577,6 +6610,392 @@ async def revoke_trusted_device_async( raise models.SDKError("Unexpected response received", http_res) + def list_biometric_credentials( + self, + *, + user_id: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.BiometricCredentialList: + r"""List a user's biometric credentials + + Returns the active biometric credentials enrolled by the user. + + :param user_id: The ID of the user whose biometric credentials are returned + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.ListUserBiometricCredentialsRequest( + user_id=user_id, + ) + + req = self._build_request( + method="GET", + path="/users/{user_id}/biometric_credentials", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="ListUserBiometricCredentials", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Users"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.BiometricCredentialList, http_res) + if utils.match_response(http_res, ["403", "404"], "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "500", "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + async def list_biometric_credentials_async( + self, + *, + user_id: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.BiometricCredentialList: + r"""List a user's biometric credentials + + Returns the active biometric credentials enrolled by the user. + + :param user_id: The ID of the user whose biometric credentials are returned + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.ListUserBiometricCredentialsRequest( + user_id=user_id, + ) + + req = self._build_request_async( + method="GET", + path="/users/{user_id}/biometric_credentials", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="ListUserBiometricCredentials", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Users"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.BiometricCredentialList, http_res) + if utils.match_response(http_res, ["403", "404"], "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "500", "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + def revoke_biometric_credential( + self, + *, + user_id: str, + biometric_credential_id: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.BiometricCredential: + r"""Revoke a user's biometric credential + + Revokes an active biometric credential enrolled by the user. + + :param user_id: The ID of the user that owns the biometric credential + :param biometric_credential_id: The ID of the biometric credential to revoke + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.RevokeUserBiometricCredentialRequest( + user_id=user_id, + biometric_credential_id=biometric_credential_id, + ) + + req = self._build_request( + method="DELETE", + path="/users/{user_id}/biometric_credentials/{biometric_credential_id}", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="RevokeUserBiometricCredential", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Users"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.BiometricCredential, http_res) + if utils.match_response(http_res, ["403", "404"], "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "500", "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + async def revoke_biometric_credential_async( + self, + *, + user_id: str, + biometric_credential_id: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.BiometricCredential: + r"""Revoke a user's biometric credential + + Revokes an active biometric credential enrolled by the user. + + :param user_id: The ID of the user that owns the biometric credential + :param biometric_credential_id: The ID of the biometric credential to revoke + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.RevokeUserBiometricCredentialRequest( + user_id=user_id, + biometric_credential_id=biometric_credential_id, + ) + + req = self._build_request_async( + method="DELETE", + path="/users/{user_id}/biometric_credentials/{biometric_credential_id}", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="RevokeUserBiometricCredential", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + tags=["Users"], + extensions=None, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.BiometricCredential, http_res) + if utils.match_response(http_res, ["403", "404"], "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "500", "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + def delete_web3_wallet( self, *, diff --git a/src/clerk_backend_api/utils/retries.py b/src/clerk_backend_api/utils/retries.py index ca7b59ef..406c1e7c 100644 --- a/src/clerk_backend_api/utils/retries.py +++ b/src/clerk_backend_api/utils/retries.py @@ -109,6 +109,18 @@ def __init__(self, inner: Exception): self.inner = inner +_TRANSPORT_ERROR_NAMES = frozenset({"NetworkError", "TimeoutException"}) +_TRANSPORT_ERROR_BASES = frozenset({"TransportError", "RequestError", "HTTPError"}) + + +def _is_transport_error(exception: BaseException) -> bool: + """Report whether an exception is a connection or timeout failure.""" + if isinstance(exception, (httpx.NetworkError, httpx.TimeoutException)): + return True + names = {base.__name__ for base in type(exception).__mro__} + return bool(names & _TRANSPORT_ERROR_NAMES) and _TRANSPORT_ERROR_BASES <= names + + def _parse_retry_after_header(response: httpx.Response) -> Optional[int]: """Parse Retry-After header from response. @@ -207,14 +219,15 @@ def do_request() -> httpx.Response: if res.status_code == parsed_code: raise TemporaryError(res) - except (httpx.NetworkError, httpx.TimeoutException) as exception: - if retries.config.retry_connection_errors: - raise - - raise PermanentError(exception) from exception except TemporaryError: raise except Exception as exception: + if ( + _is_transport_error(exception) + and retries.config.retry_connection_errors + ): + raise + raise PermanentError(exception) from exception return res @@ -252,14 +265,15 @@ async def do_request() -> httpx.Response: if res.status_code == parsed_code: raise TemporaryError(res) - except (httpx.NetworkError, httpx.TimeoutException) as exception: - if retries.config.retry_connection_errors: - raise - - raise PermanentError(exception) from exception except TemporaryError: raise except Exception as exception: + if ( + _is_transport_error(exception) + and retries.config.retry_connection_errors + ): + raise + raise PermanentError(exception) from exception return res @@ -304,6 +318,7 @@ def retry_with_backoff( retry_after_ms = _parse_retry_after_ms_header(exception.response) if retry_after_ms is not None: exception.retry_after = retry_after_ms + exception.response.close() sleep = _get_sleep_interval( exception, initial_interval, @@ -344,6 +359,7 @@ async def retry_with_backoff_async( retry_after_ms = _parse_retry_after_ms_header(exception.response) if retry_after_ms is not None: exception.retry_after = retry_after_ms + await exception.response.aclose() sleep = _get_sleep_interval( exception, initial_interval, diff --git a/src/clerk_backend_api/utils/values.py b/src/clerk_backend_api/utils/values.py index dae01a44..ac217f47 100644 --- a/src/clerk_backend_api/utils/values.py +++ b/src/clerk_backend_api/utils/values.py @@ -52,9 +52,11 @@ def match_status_codes(status_codes: List[str], status_code: int) -> bool: T = TypeVar("T") + def cast_partial(typ): return partial(cast, typ) + def get_global_from_env( value: Optional[T], env_key: str, type_cast: Callable[[str], T] ) -> Optional[T]: