From 3eaf51ed05a78c2134c8753300c357b3409ca1c4 Mon Sep 17 00:00:00 2001 From: speakeasybot Date: Fri, 14 Aug 2026 00:29:26 +0000 Subject: [PATCH 1/2] ## Python SDK Changes: * `clerk.directories.list()`: **Added** * `clerk.directories.create()`: **Added** * `clerk.directories.get()`: **Added** * `clerk.directories.update()`: **Added** * `clerk.directories.delete()`: **Added** * `clerk.directories.rotate_api_key()`: **Added** * `clerk.directories.list_group_role_mappings()`: **Added** * `clerk.directories.create_group_role_mapping()`: **Added** * `clerk.directories.replace_group_role_mappings()`: **Added** * `clerk.directories.delete_group_role_mapping()`: **Added** * `clerk.users.list()`: * `request.starting_after` **Added** * `clerk.enterprise_connections.list()`: `response.data[].custom_attributes[].directory_path` **Added** * `clerk.enterprise_connections.create()`: * `request.custom_attributes[].directory_path` **Added** * `response.custom_attributes[].directory_path` **Added** * `clerk.enterprise_connections.get()`: `response.custom_attributes[].directory_path` **Added** * `clerk.enterprise_connections.update()`: * `request.custom_attributes[].directory_path` **Added** * `response.custom_attributes[].directory_path` **Added** * `clerk.scim_directories.list()`: `response.data[].custom_attributes[].directory_path` **Added** * `clerk.scim_directories.create()`: `response.custom_attributes[].directory_path` **Added** * `clerk.scim_directories.get()`: `response.custom_attributes[].directory_path` **Added** * `clerk.scim_directories.update()`: `response.custom_attributes[].directory_path` **Added** * `clerk.scim_directories.rotate_api_key()`: `response.custom_attributes[].directory_path` **Added** * `clerk.scim_directories.list_group_role_mappings()`: `response.data[]` **Changed** * `clerk.scim_directories.create_group_role_mapping()`: `response` **Changed** * `clerk.scim_directories.replace_group_role_mappings()`: `response.data[]` **Changed** --- .speakeasy/gen.lock | 528 ++++- .speakeasy/gen.yaml | 2 +- .speakeasy/workflow.lock | 12 +- README-PYPI.md | 95 +- README.md | 95 +- RELEASES.md | 12 +- .../createdirectorygrouprolemappingrequest.md | 9 + ...atedirectorygrouprolemappingrequestbody.md | 11 + .../createdirectorygrouprolemappings.md | 13 + docs/models/createdirectoryrequestbody.md | 11 + ...ateenterpriseconnectioncustomattributes.md | 1 + docs/models/createscimdirectoryrequestbody.md | 6 +- .../createscimgrouprolemappingrequest.md | 2 +- docs/models/createuserrequestbody.md | 2 +- docs/models/customattributes.md | 1 + .../deletedirectorygrouprolemappingrequest.md | 9 + docs/models/deletedirectoryrequest.md | 8 + docs/models/deletescimdirectoryrequest.md | 6 +- .../deletescimgrouprolemappingrequest.md | 2 +- docs/models/directory.md | 22 + docs/models/directorycustomattributes.md | 13 + docs/models/directorygrouprolemapping.md | 21 + .../directorygrouprolemappingdeleted.md | 12 + .../directorygrouprolemappingdeletedobject.md | 18 + docs/models/directorygrouprolemappinglist.md | 11 + .../models/directorygrouprolemappingobject.md | 18 + docs/models/directorylist.md | 11 + docs/models/directoryobject.md | 18 + docs/models/getdirectoryrequest.md | 8 + docs/models/getscimdirectoryrequest.md | 6 +- docs/models/getuserlistrequest.md | 55 +- docs/models/listdirectoriesrequest.md | 9 + .../listdirectorygrouprolemappingsrequest.md | 8 + docs/models/listoauthapplicationsrequest.md | 2 +- .../listscimgrouprolemappingsrequest.md | 6 +- ...placedirectorygrouprolemappingsmappings.md | 10 + ...eplacedirectorygrouprolemappingsrequest.md | 9 + ...cedirectorygrouprolemappingsrequestbody.md | 8 + .../replacescimgrouprolemappingsrequest.md | 2 +- docs/models/rotatedirectoryapikeyrequest.md | 8 + .../rotatescimdirectoryapikeyrequest.md | 6 +- docs/models/scim.md | 12 +- docs/models/scimdirectory.md | 16 +- docs/models/scimdirectorycustomattributes.md | 1 + docs/models/scimdirectorylist.md | 4 +- docs/models/scimgrouprolemapping.md | 25 +- docs/models/updatedirectoryrequest.md | 9 + docs/models/updatedirectoryrequestbody.md | 12 + ...ateenterpriseconnectioncustomattributes.md | 1 + docs/models/updatescimdirectoryrequest.md | 2 +- docs/models/updatescimdirectoryrequestbody.md | 8 +- docs/models/updateuserrequestbody.md | 2 +- docs/models/user.md | 2 +- docs/sdks/directories/README.md | 459 ++++ docs/sdks/enterpriseconnectionssdk/README.md | 2 + docs/sdks/oauthapplicationssdk/README.md | 2 +- docs/sdks/scimdirectories/README.md | 52 +- docs/sdks/users/README.md | 10 +- poetry.lock | 20 +- pyproject.toml | 2 +- src/clerk_backend_api/_version.py | 4 +- src/clerk_backend_api/directories.py | 2080 +++++++++++++++++ src/clerk_backend_api/models/__init__.py | 159 ++ .../createdirectorygrouprolemappingop.py | 73 + .../models/createdirectoryop.py | 107 + .../models/createenterpriseconnectionop.py | 9 +- .../models/createscimdirectoryop.py | 12 +- .../models/createscimgrouprolemappingop.py | 4 +- src/clerk_backend_api/models/createuserop.py | 4 +- .../deletedirectorygrouprolemappingop.py | 25 + .../models/deletedirectoryop.py | 18 + .../models/deletescimdirectoryop.py | 4 +- .../models/deletescimgrouprolemappingop.py | 4 +- src/clerk_backend_api/models/directory.py | 174 ++ .../models/directory_list.py | 24 + .../models/directorygrouprolemapping.py | 98 + .../directorygrouprolemapping_deleted.py | 49 + .../models/directorygrouprolemapping_list.py | 27 + .../models/enterpriseconnection.py | 9 +- .../models/getdirectoryop.py | 18 + .../models/getscimdirectoryop.py | 4 +- src/clerk_backend_api/models/getuserlistop.py | 27 + .../models/listdirectoriesop.py | 55 + .../listdirectorygrouprolemappingsop.py | 18 + .../models/listoauthapplicationsop.py | 10 +- .../models/listscimgrouprolemappingsop.py | 4 +- .../replacedirectorygrouprolemappingsop.py | 72 + .../models/replacescimgrouprolemappingsop.py | 4 +- .../models/rotatedirectoryapikeyop.py | 18 + .../models/rotatescimdirectoryapikeyop.py | 4 +- src/clerk_backend_api/models/scimdirectory.py | 41 +- .../models/scimdirectory_list.py | 8 +- .../models/scimgrouprolemapping.py | 19 +- .../models/updatedirectoryop.py | 100 + .../models/updateenterpriseconnectionop.py | 9 +- .../models/updatescimdirectoryop.py | 20 +- src/clerk_backend_api/models/updateuserop.py | 4 +- src/clerk_backend_api/models/user.py | 20 +- .../oauthapplications_sdk.py | 4 + src/clerk_backend_api/scimdirectories.py | 104 +- src/clerk_backend_api/sdk.py | 3 + src/clerk_backend_api/users.py | 18 +- 102 files changed, 4739 insertions(+), 476 deletions(-) create mode 100644 docs/models/createdirectorygrouprolemappingrequest.md create mode 100644 docs/models/createdirectorygrouprolemappingrequestbody.md create mode 100644 docs/models/createdirectorygrouprolemappings.md create mode 100644 docs/models/createdirectoryrequestbody.md create mode 100644 docs/models/deletedirectorygrouprolemappingrequest.md create mode 100644 docs/models/deletedirectoryrequest.md create mode 100644 docs/models/directory.md create mode 100644 docs/models/directorycustomattributes.md create mode 100644 docs/models/directorygrouprolemapping.md create mode 100644 docs/models/directorygrouprolemappingdeleted.md create mode 100644 docs/models/directorygrouprolemappingdeletedobject.md create mode 100644 docs/models/directorygrouprolemappinglist.md create mode 100644 docs/models/directorygrouprolemappingobject.md create mode 100644 docs/models/directorylist.md create mode 100644 docs/models/directoryobject.md create mode 100644 docs/models/getdirectoryrequest.md create mode 100644 docs/models/listdirectoriesrequest.md create mode 100644 docs/models/listdirectorygrouprolemappingsrequest.md create mode 100644 docs/models/replacedirectorygrouprolemappingsmappings.md create mode 100644 docs/models/replacedirectorygrouprolemappingsrequest.md create mode 100644 docs/models/replacedirectorygrouprolemappingsrequestbody.md create mode 100644 docs/models/rotatedirectoryapikeyrequest.md create mode 100644 docs/models/updatedirectoryrequest.md create mode 100644 docs/models/updatedirectoryrequestbody.md create mode 100644 docs/sdks/directories/README.md create mode 100644 src/clerk_backend_api/directories.py create mode 100644 src/clerk_backend_api/models/createdirectorygrouprolemappingop.py create mode 100644 src/clerk_backend_api/models/createdirectoryop.py create mode 100644 src/clerk_backend_api/models/deletedirectorygrouprolemappingop.py create mode 100644 src/clerk_backend_api/models/deletedirectoryop.py create mode 100644 src/clerk_backend_api/models/directory.py create mode 100644 src/clerk_backend_api/models/directory_list.py create mode 100644 src/clerk_backend_api/models/directorygrouprolemapping.py create mode 100644 src/clerk_backend_api/models/directorygrouprolemapping_deleted.py create mode 100644 src/clerk_backend_api/models/directorygrouprolemapping_list.py create mode 100644 src/clerk_backend_api/models/getdirectoryop.py create mode 100644 src/clerk_backend_api/models/listdirectoriesop.py create mode 100644 src/clerk_backend_api/models/listdirectorygrouprolemappingsop.py create mode 100644 src/clerk_backend_api/models/replacedirectorygrouprolemappingsop.py create mode 100644 src/clerk_backend_api/models/rotatedirectoryapikeyop.py create mode 100644 src/clerk_backend_api/models/updatedirectoryop.py diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 4934f471..a85f253b 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,19 +1,19 @@ lockVersion: 2.0.0 id: bfe29c99-6e67-43fe-b928-64d6a5ed6aa8 management: - docChecksum: 697788431789786cfa83be848849c06e + docChecksum: 48d37b69fbf352e50d57caa2f204835e docVersion: "2026-05-12" - speakeasyVersion: 1.793.0 + speakeasyVersion: 1.793.1 generationVersion: 2.928.0 - releaseVersion: 7.0.0 - configChecksum: c2bb35f7904ba3793c101e3fc39c921a + releaseVersion: 7.0.1 + configChecksum: b8986130afa2a5d9f552c4d806565301 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: cc43df87-65cb-4bc1-993c-8054281a967f + pristine_commit_hash: 839b84446b4a55a633169c2612615a0ae63e0c77 + pristine_tree_hash: 52e79f60fab238c9cd88a1907c5f5e52e441c272 features: python: additionalDependencies: 1.1.0 @@ -752,6 +752,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 +778,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 @@ -922,12 +938,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 +990,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:8bb9568b0512a3aecccb739b3f1a8582cc4bddf7 + pristine_git_object: 6b4f5c22f6f3a812eb79fadd0c0fbebc6a96b54d docs/models/createwaitlistentryrequestbody.md: id: 181ff2ee24c2 last_write_checksum: sha1:65f994c81871aa15c81f31fdca105e6831cc87c8 @@ -994,8 +1010,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 +1064,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 +1146,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 +1172,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 @@ -1448,6 +1508,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 +1622,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 +1654,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 @@ -1736,6 +1800,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 +1846,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 +1898,8 @@ 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/listusertrusteddevicesrequest.md: id: 9816813c0eb3 last_write_checksum: sha1:376866b2944a48f4228ffa1f2b8ac33c49fa763b @@ -2320,6 +2392,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 +2430,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 @@ -2628,6 +2712,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 +2730,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 +2790,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 @@ -2972,6 +3060,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 +3090,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 @@ -3166,12 +3262,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 +3290,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 +3330,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 @@ -3788,6 +3884,10 @@ trackedFiles: id: ba883fd0c1cf last_write_checksum: sha1:b0581bd106e26d8a50e0192847765b792be20930 pristine_git_object: ca8c834e59bce7af2d5efd173641c806c22cba5a + docs/sdks/directories/README.md: + id: e8590265548d + last_write_checksum: sha1:7b01cd8b3d0f3db0ad7b62b2776871471b64b271 + pristine_git_object: e47347171b3e27e38d9bf3203ca9e3b377054a9d docs/sdks/domainssdk/README.md: id: c7e6539330d0 last_write_checksum: sha1:7fb4960460f2124248acf1a08f384c55d389ee58 @@ -3806,8 +3906,8 @@ 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 @@ -3842,8 +3942,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:858b8a31999632bfb7355f2cdc661de46bf0d014 + pristine_git_object: 0f837ff9bae0916ed06da9568857d03a00d354f6 docs/sdks/organizationdomainssdk/README.md: id: 76a0872c137f last_write_checksum: sha1:3192f245a59c1d091ce221c4e62bf8ba76cd16d3 @@ -3890,8 +3990,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:d1b599d634c1814873f81b574c2451d9c98a690f + pristine_git_object: d8a417ae6635efc72332ba4a958e19cbf4074767 docs/sdks/sessions/README.md: id: 57ad62844f79 last_write_checksum: sha1:aa90f444d0a8b6efe38e390d7987b634eb07ca9a @@ -3914,8 +4014,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:c0b6eeeb8f08daf85b44064ec1d8cb0cb91fbe5a + pristine_git_object: f59da12106217ead05cfc95815ca99f6de505580 docs/sdks/waitlistentriessdk/README.md: id: be78acbbb2f4 last_write_checksum: sha1:08794f1399c6b81cf83ef513816222cb5d12f53c @@ -3938,8 +4038,8 @@ trackedFiles: pristine_git_object: 7fd8db13ad9399ab075a5fb70e6da17525ad3ed0 pyproject.toml: id: 5d07e7d72637 - last_write_checksum: sha1:3e547fd95a9c0174b160274d4133d2512641922c - pristine_git_object: 449a85ff8c8e8120a48d05606ee35e25ce7e449e + last_write_checksum: sha1:c448876879175a2b48c0ecc89f03abb6c0881cce + pristine_git_object: dde907d2ff81b1d87eafddd9bbc88b90a9df8e41 scripts/prepare_readme.py: id: e0c5957a6035 last_write_checksum: sha1:419f10ccc385a29136e599315b61a0aa7a1c3e15 @@ -3966,8 +4066,8 @@ 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:4b00b9e015ac14b7b87d323da169b24fbefdd6c5 + pristine_git_object: e89f08e0efe3868254c3b16c98532406ccc103df src/clerk_backend_api/actortokens.py: id: 3b3f89863233 last_write_checksum: sha1:5231f0f056ad04d1451b5b0daac771270dae0b31 @@ -4008,6 +4108,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:9fb213e001b305db41423053d898436801b74206 + pristine_git_object: b95259d4a1dc0a3ffd3992199bdedf7980782dc3 src/clerk_backend_api/domains_sdk.py: id: e49d7bf7ea9c last_write_checksum: sha1:3a9d3cff75d4c293a953a130361f44719d72b058 @@ -4062,8 +4166,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:efb4c2c478827730b1380f97d075debdfc863090 + pristine_git_object: d28ab01c69cb8d64c3b891098ca5ee143ceda1c5 src/clerk_backend_api/models/_verificationresponse.py: id: 60d0443bfa2c last_write_checksum: sha1:fe16527d8fc007a482bfc55e6f3ccd67f407d7bf @@ -4288,14 +4392,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 @@ -4370,12 +4482,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 +4506,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:251bc0091861c7aa5955d0e7758d219c28479c0e + pristine_git_object: 52857c9da921762bd1a6fe47ae6ea7a9140d2c02 src/clerk_backend_api/models/createwaitlistentryop.py: id: 5fc8451ee608 last_write_checksum: sha1:9c93e68fffa5039690697f323c3c50422036c6be @@ -4416,6 +4528,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 +4610,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,6 +4632,26 @@ 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 @@ -4534,8 +4674,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 +4756,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 +4838,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 +4870,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 @@ -4792,6 +4936,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 +4970,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 +5018,8 @@ 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/listusertrusteddevicesop.py: id: 8637b4e598a5 last_write_checksum: sha1:23e97203594f0d66e73017305ffaaab846c390ec @@ -5076,6 +5228,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 +5246,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 @@ -5176,6 +5332,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 +5346,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 +5370,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 +5484,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 +5498,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 @@ -5418,8 +5582,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 +5594,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 +5610,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 +5686,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:d16275569603c0a65e10a390ddccd3f9e139bdbe + pristine_git_object: 9692f30df0f6f2e8eef9636aa75916699960e9c1 src/clerk_backend_api/organizationdomains_sdk.py: id: b3594639c697 last_write_checksum: sha1:79a6ae1eea25537fd8896f6db4e5955b5d34cd4c @@ -5574,12 +5738,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:3e3a558c235e030bacc863dc58d22b6ef858fe12 + pristine_git_object: 5a10f574a90621019210ecc816db53e177755ba6 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 +5782,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:4fe4aaea8eed2e2e5e20dcc6730aed8cfd22e03a + pristine_git_object: f02a7fc5746bd75012d0ee5fbae48c00daf0985c src/clerk_backend_api/utils/__init__.py: id: a8b67e49e50a last_write_checksum: sha1:53c9544397bbc534c45a228feac3cdb2e9017fe6 @@ -6070,6 +6234,7 @@ 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": ""}}] @@ -8238,16 +8403,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 +8422,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 +8431,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: @@ -8549,7 +8714,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 +8724,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 +8736,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 +8756,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 +8766,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 +8778,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 +8804,116 @@ 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": {}} + 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.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* `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()`: `response.custom_attributes[].directory_path` **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..313c9b8c 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.0.1 additionalDependencies: dev: pytest: ^8.3.3 diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index e648fba9..46588060 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -1,9 +1,9 @@ -speakeasyVersion: 1.793.0 +speakeasyVersion: 1.793.1 sources: clerk-openapi: sourceNamespace: clerk-openapi - sourceRevisionDigest: sha256:bd0ab322463c77574aedf25a6a1096c2d83c979091a90549aa26cda62d070f8e - sourceBlobDigest: sha256:cd24ae3cad1eb4442115f308e7a4007f47d67aa99f55067edda80def25fcaabe + sourceRevisionDigest: sha256:beb8cf6f7eaa9bac5c9ab51bf3bc97ae7b2bf43bc4bdd21ea54e7120857fe946 + sourceBlobDigest: sha256:331fc4d8cb0c4d6aab2cf97c3563272934b9d843efa23726fe769e8a846ec14d 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:beb8cf6f7eaa9bac5c9ab51bf3bc97ae7b2bf43bc4bdd21ea54e7120857fe946 + sourceBlobDigest: sha256:331fc4d8cb0c4d6aab2cf97c3563272934b9d843efa23726fe769e8a846ec14d codeSamplesNamespace: clerk-openapi-python-code-samples - codeSamplesRevisionDigest: sha256:9b07759bffaa23cbe523a107eace55b58532d750e74bfedf47a32c6bdf2bd801 + codeSamplesRevisionDigest: sha256:3ff3ecb75c7d0e85f0c72fc577893fbc670ac3ad2ad339063fe56fcd9ec295e5 workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/README-PYPI.md b/README-PYPI.md index 299ec12a..9a4e86b5 100644 --- a/README-PYPI.md +++ b/README-PYPI.md @@ -312,6 +312,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 +536,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 @@ -749,41 +762,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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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 247 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. diff --git a/README.md b/README.md index 0e02bc4f..2ed1355e 100644 --- a/README.md +++ b/README.md @@ -312,6 +312,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 +536,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 @@ -749,41 +762,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 247 methods.* +* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponseBody`](./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 247 methods.* +* [`CreateAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/createapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 247 methods.* +* [`GetAPIKeysAPIKeysResponseBody`](./src/clerk_backend_api/models/getapikeysapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 247 methods.* +* [`GetAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/getapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 247 methods.* +* [`UpdateAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/updateapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 247 methods.* +* [`DeleteAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/deleteapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 247 methods.* +* [`GetAPIKeySecretAPIKeysResponseBody`](./src/clerk_backend_api/models/getapikeysecretapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 247 methods.* +* [`RevokeAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/revokeapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 247 methods.* +* [`VerifyAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/verifyapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 247 methods.* +* [`CreateM2MTokenM2mResponseBody`](./src/clerk_backend_api/models/createm2mtokenm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 247 methods.* +* [`GetM2MTokensM2mResponseBody`](./src/clerk_backend_api/models/getm2mtokensm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 247 methods.* +* [`RevokeM2MTokenM2mResponseBody`](./src/clerk_backend_api/models/revokem2mtokenm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 247 methods.* +* [`VerifyM2MTokenM2mResponseBody`](./src/clerk_backend_api/models/verifym2mtokenm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 247 methods.* +* [`VerifyOAuthAccessTokenOauthAccessTokensResponseBody`](./src/clerk_backend_api/models/verifyoauthaccesstokenoauthaccesstokensresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 247 methods.* +* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponseResponseBody`](./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponseresponsebody.py): 401 Unauthorized. Status code `401`. Applicable to 1 of 247 methods.* +* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponseResponseBody`](./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponseresponsebody.py): 401 Unauthorized. Status code `401`. Applicable to 1 of 247 methods.* +* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponse403ResponseBody`](./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponse403responsebody.py): 403 Forbidden. Status code `403`. Applicable to 1 of 247 methods.* +* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponse403ResponseBody`](./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponse403responsebody.py): 403 Forbidden. Status code `403`. Applicable to 1 of 247 methods.* +* [`GetM2MTokensM2mResponseResponseBody`](./src/clerk_backend_api/models/getm2mtokensm2mresponseresponsebody.py): 403 Forbidden. Status code `403`. Applicable to 1 of 247 methods.* +* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponse404ResponseBody`](./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponse404responsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 247 methods.* +* [`GetAPIKeysAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/getapikeysapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 247 methods.* +* [`GetAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/getapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 247 methods.* +* [`UpdateAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/updateapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 247 methods.* +* [`DeleteAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/deleteapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 247 methods.* +* [`GetAPIKeySecretAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/getapikeysecretapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 247 methods.* +* [`RevokeAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/revokeapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 247 methods.* +* [`VerifyAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/verifyapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 247 methods.* +* [`GetM2MTokensM2mResponse404ResponseBody`](./src/clerk_backend_api/models/getm2mtokensm2mresponse404responsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 247 methods.* +* [`RevokeM2MTokenM2mResponseResponseBody`](./src/clerk_backend_api/models/revokem2mtokenm2mresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 247 methods.* +* [`VerifyM2MTokenM2mResponseResponseBody`](./src/clerk_backend_api/models/verifym2mtokenm2mresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 247 methods.* +* [`VerifyOAuthAccessTokenOauthAccessTokensResponseResponseBody`](./src/clerk_backend_api/models/verifyoauthaccesstokenoauthaccesstokensresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 247 methods.* +* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponse409ResponseBody`](./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponse409responsebody.py): 409 Conflict. Status code `409`. Applicable to 1 of 247 methods.* +* [`CreateAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/createapikeyapikeysresponseresponsebody.py): 409 Conflict. Status code `409`. Applicable to 1 of 247 methods.* +* [`CreateM2MTokenM2mResponseResponseBody`](./src/clerk_backend_api/models/createm2mtokenm2mresponseresponsebody.py): 409 Conflict. Status code `409`. Applicable to 1 of 247 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. diff --git a/RELEASES.md b/RELEASES.md index ecf78b59..18e09834 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-08-14 00:27:21 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.793.1 (2.928.0) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v7.0.1] . +### Releases +- [PyPI v7.0.1] https://pypi.org/project/clerk-backend-api/7.0.1 - . \ 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/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..6b4f5c22 100644 --- a/docs/models/createuserrequestbody.md +++ b/docs/models/createuserrequestbody.md @@ -32,6 +32,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/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/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/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/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/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/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/directories/README.md b/docs/sdks/directories/README.md new file mode 100644 index 00000000..e4734717 --- /dev/null +++ b/docs/sdks/directories/README.md @@ -0,0 +1,459 @@ +# 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 | 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. +Group role mapping must be enabled on the directory. + +### 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. Group role mapping must be +enabled on the directory. + +### 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. Group role mapping must be enabled on the +directory. + +### 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/oauthapplicationssdk/README.md b/docs/sdks/oauthapplicationssdk/README.md index fb9af2fd..0f837ff9 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 diff --git a/docs/sdks/scimdirectories/README.md b/docs/sdks/scimdirectories/README.md index 5f081e03..d8a417ae 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 @@ -283,7 +283,7 @@ with Clerk( ## 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,7 +323,7 @@ with Clerk( ## create_group_role_mapping -Creates a new SCIM group to organization role mapping for a SCIM directory. +Creates a new SCIM group to organization role mapping for a directory. Group role mapping must be enabled on the directory. ### Example Usage @@ -348,7 +348,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. | @@ -394,7 +394,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. | @@ -436,7 +436,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..f59da121 100644 --- a/docs/sdks/users/README.md +++ b/docs/sdks/users/README.md @@ -46,6 +46,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 +103,7 @@ with Clerk( ], "limit": 20, "offset": 10, + "starting_after": "", }) # Handle response @@ -204,7 +210,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 +407,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 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..dde907d2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "clerk-backend-api" -version = "7.0.0" +version = "7.0.1" 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..e89f08e0 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.0.1" __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" +__user_agent__: str = "speakeasy-sdk/python 7.0.1 2.928.0 2026-05-12 clerk-backend-api" try: if __package__ is not None: diff --git a/src/clerk_backend_api/directories.py b/src/clerk_backend_api/directories.py new file mode 100644 index 00000000..b95259d4 --- /dev/null +++ b/src/clerk_backend_api/directories.py @@ -0,0 +1,2080 @@ +"""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"], "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"], "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. + Group role mapping must be enabled on the directory. + + :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. + Group role mapping must be enabled on the directory. + + :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. Group role mapping must be + enabled on the directory. + + :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. Group role mapping must be + enabled on the directory. + + :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. Group role mapping must be enabled on the + directory. + + :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. Group role mapping must be enabled on the + directory. + + :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..d28ab01c 100644 --- a/src/clerk_backend_api/models/__init__.py +++ b/src/clerk_backend_api/models/__init__.py @@ -434,6 +434,18 @@ CreateBulkWaitlistEntriesRequestBody, CreateBulkWaitlistEntriesRequestBodyTypedDict, ) + from .createdirectorygrouprolemappingop import ( + CreateDirectoryGroupRoleMappingRequest, + CreateDirectoryGroupRoleMappingRequestBody, + CreateDirectoryGroupRoleMappingRequestBodyTypedDict, + CreateDirectoryGroupRoleMappingRequestTypedDict, + ) + from .createdirectoryop import ( + CreateDirectoryGroupRoleMappings, + CreateDirectoryGroupRoleMappingsTypedDict, + CreateDirectoryRequestBody, + CreateDirectoryRequestBodyTypedDict, + ) from .createemailaddressop import ( CreateEmailAddressRequestBody, CreateEmailAddressRequestBodyTypedDict, @@ -645,6 +657,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,6 +751,28 @@ 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, @@ -984,6 +1026,7 @@ GetCommerceSubscriptionItemListRequestTypedDict, QueryParamPayerType, ) + from .getdirectoryop import GetDirectoryRequest, GetDirectoryRequestTypedDict from .getemailaddressop import ( GetEmailAddressRequest, GetEmailAddressRequestTypedDict, @@ -1156,6 +1199,14 @@ ListAllowlistIdentifiersRequest, ListAllowlistIdentifiersRequestTypedDict, ) + from .listdirectoriesop import ( + ListDirectoriesRequest, + ListDirectoriesRequestTypedDict, + ) + from .listdirectorygrouprolemappingsop import ( + ListDirectoryGroupRoleMappingsRequest, + ListDirectoryGroupRoleMappingsRequestTypedDict, + ) from .listenterpriseconnectionsop import ( ListEnterpriseConnectionsRequest, ListEnterpriseConnectionsRequestTypedDict, @@ -1461,6 +1512,14 @@ RemoveUserPasswordRequestBodyTypedDict, RemoveUserPasswordRequestTypedDict, ) + from .replacedirectorygrouprolemappingsop import ( + ReplaceDirectoryGroupRoleMappingsMappings, + ReplaceDirectoryGroupRoleMappingsMappingsTypedDict, + ReplaceDirectoryGroupRoleMappingsRequest, + ReplaceDirectoryGroupRoleMappingsRequestBody, + ReplaceDirectoryGroupRoleMappingsRequestBodyTypedDict, + ReplaceDirectoryGroupRoleMappingsRequestTypedDict, + ) from .replaceorganizationmetadataop import ( ReplaceOrganizationMetadataRequest, ReplaceOrganizationMetadataRequestBody, @@ -1624,6 +1683,10 @@ ) from .rolesetitem import RoleSetItem, RoleSetItemObject, RoleSetItemTypedDict from .rolesets import RoleSets, RoleSetsTypedDict + from .rotatedirectoryapikeyop import ( + RotateDirectoryAPIKeyRequest, + RotateDirectoryAPIKeyRequestTypedDict, + ) from .rotatemachinesecretkeyop import ( RotateMachineSecretKeyRequest, RotateMachineSecretKeyRequestBody, @@ -1808,6 +1871,12 @@ UpdateAPIKeyResponseBody, UpdateAPIKeyResponseBodyTypedDict, ) + from .updatedirectoryop import ( + UpdateDirectoryRequest, + UpdateDirectoryRequestBody, + UpdateDirectoryRequestBodyTypedDict, + UpdateDirectoryRequestTypedDict, + ) from .updatedomainop import ( UpdateDomainRequest, UpdateDomainRequestBody, @@ -2434,6 +2503,14 @@ "CreateBulkInvitationsTemplateSlug", "CreateBulkWaitlistEntriesRequestBody", "CreateBulkWaitlistEntriesRequestBodyTypedDict", + "CreateDirectoryGroupRoleMappingRequest", + "CreateDirectoryGroupRoleMappingRequestBody", + "CreateDirectoryGroupRoleMappingRequestBodyTypedDict", + "CreateDirectoryGroupRoleMappingRequestTypedDict", + "CreateDirectoryGroupRoleMappings", + "CreateDirectoryGroupRoleMappingsTypedDict", + "CreateDirectoryRequestBody", + "CreateDirectoryRequestBodyTypedDict", "CreateEmailAddressRequestBody", "CreateEmailAddressRequestBodyTypedDict", "CreateEnterpriseConnectionAttributeMapping", @@ -2574,6 +2651,10 @@ "DeleteBackupCodeResponseBodyTypedDict", "DeleteBlocklistIdentifierRequest", "DeleteBlocklistIdentifierRequestTypedDict", + "DeleteDirectoryGroupRoleMappingRequest", + "DeleteDirectoryGroupRoleMappingRequestTypedDict", + "DeleteDirectoryRequest", + "DeleteDirectoryRequestTypedDict", "DeleteDomainRequest", "DeleteDomainRequestTypedDict", "DeleteEmailAddressRequest", @@ -2624,6 +2705,21 @@ "DeleteWaitlistEntryRequestTypedDict", "DeletedObject", "DeletedObjectTypedDict", + "Directory", + "DirectoryCustomAttributes", + "DirectoryCustomAttributesTypedDict", + "DirectoryGroupRoleMapping", + "DirectoryGroupRoleMappingDeleted", + "DirectoryGroupRoleMappingDeletedObject", + "DirectoryGroupRoleMappingDeletedTypedDict", + "DirectoryGroupRoleMappingList", + "DirectoryGroupRoleMappingListTypedDict", + "DirectoryGroupRoleMappingObject", + "DirectoryGroupRoleMappingTypedDict", + "DirectoryList", + "DirectoryListTypedDict", + "DirectoryObject", + "DirectoryTypedDict", "DisableMFARequest", "DisableMFARequestTypedDict", "DisableMFAResponseBody", @@ -2757,6 +2853,8 @@ "GetCommerceSubscriptionItemListQueryParamStatus", "GetCommerceSubscriptionItemListRequest", "GetCommerceSubscriptionItemListRequestTypedDict", + "GetDirectoryRequest", + "GetDirectoryRequestTypedDict", "GetEmailAddressRequest", "GetEmailAddressRequestTypedDict", "GetEnterpriseConnectionRequest", @@ -2887,6 +2985,10 @@ "ListAllOrganizationDomainsRequestTypedDict", "ListAllowlistIdentifiersRequest", "ListAllowlistIdentifiersRequestTypedDict", + "ListDirectoriesRequest", + "ListDirectoriesRequestTypedDict", + "ListDirectoryGroupRoleMappingsRequest", + "ListDirectoryGroupRoleMappingsRequestTypedDict", "ListEnterpriseConnectionTestRunsQueryParamStatus", "ListEnterpriseConnectionTestRunsRequest", "ListEnterpriseConnectionTestRunsRequestTypedDict", @@ -3133,6 +3235,12 @@ "RemoveUserPasswordRequestBody", "RemoveUserPasswordRequestBodyTypedDict", "RemoveUserPasswordRequestTypedDict", + "ReplaceDirectoryGroupRoleMappingsMappings", + "ReplaceDirectoryGroupRoleMappingsMappingsTypedDict", + "ReplaceDirectoryGroupRoleMappingsRequest", + "ReplaceDirectoryGroupRoleMappingsRequestBody", + "ReplaceDirectoryGroupRoleMappingsRequestBodyTypedDict", + "ReplaceDirectoryGroupRoleMappingsRequestTypedDict", "ReplaceOrganizationMetadataRequest", "ReplaceOrganizationMetadataRequestBody", "ReplaceOrganizationMetadataRequestBodyTypedDict", @@ -3274,6 +3382,8 @@ "RoleTypedDict", "Roles", "RolesTypedDict", + "RotateDirectoryAPIKeyRequest", + "RotateDirectoryAPIKeyRequestTypedDict", "RotateMachineSecretKeyRequest", "RotateMachineSecretKeyRequestBody", "RotateMachineSecretKeyRequestBodyTypedDict", @@ -3421,6 +3531,10 @@ "UpdateAPIKeyRequestTypedDict", "UpdateAPIKeyResponseBody", "UpdateAPIKeyResponseBodyTypedDict", + "UpdateDirectoryRequest", + "UpdateDirectoryRequestBody", + "UpdateDirectoryRequestBodyTypedDict", + "UpdateDirectoryRequestTypedDict", "UpdateDomainRequest", "UpdateDomainRequestBody", "UpdateDomainRequestBodyTypedDict", @@ -4090,6 +4204,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 +4359,10 @@ "DeleteBackupCodeResponseBodyTypedDict": ".deletebackupcodeop", "DeleteBlocklistIdentifierRequest": ".deleteblocklistidentifierop", "DeleteBlocklistIdentifierRequestTypedDict": ".deleteblocklistidentifierop", + "DeleteDirectoryGroupRoleMappingRequest": ".deletedirectorygrouprolemappingop", + "DeleteDirectoryGroupRoleMappingRequestTypedDict": ".deletedirectorygrouprolemappingop", + "DeleteDirectoryRequest": ".deletedirectoryop", + "DeleteDirectoryRequestTypedDict": ".deletedirectoryop", "DeletedObject": ".deletedobject", "DeletedObjectTypedDict": ".deletedobject", "DeleteDomainRequest": ".deletedomainop", @@ -4287,6 +4413,21 @@ "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", @@ -4501,6 +4642,8 @@ "GetCommerceSubscriptionItemListRequest": ".getcommercesubscriptionitemlistop", "GetCommerceSubscriptionItemListRequestTypedDict": ".getcommercesubscriptionitemlistop", "QueryParamPayerType": ".getcommercesubscriptionitemlistop", + "GetDirectoryRequest": ".getdirectoryop", + "GetDirectoryRequestTypedDict": ".getdirectoryop", "GetEmailAddressRequest": ".getemailaddressop", "GetEmailAddressRequestTypedDict": ".getemailaddressop", "GetEnterpriseConnectionRequest": ".getenterpriseconnectionop", @@ -4627,6 +4770,10 @@ "Verified": ".listallorganizationdomainsop", "ListAllowlistIdentifiersRequest": ".listallowlistidentifiersop", "ListAllowlistIdentifiersRequestTypedDict": ".listallowlistidentifiersop", + "ListDirectoriesRequest": ".listdirectoriesop", + "ListDirectoriesRequestTypedDict": ".listdirectoriesop", + "ListDirectoryGroupRoleMappingsRequest": ".listdirectorygrouprolemappingsop", + "ListDirectoryGroupRoleMappingsRequestTypedDict": ".listdirectorygrouprolemappingsop", "ListEnterpriseConnectionsRequest": ".listenterpriseconnectionsop", "ListEnterpriseConnectionsRequestTypedDict": ".listenterpriseconnectionsop", "ListEnterpriseConnectionTestRunsQueryParamStatus": ".listenterpriseconnectiontestrunsop", @@ -4840,6 +4987,12 @@ "RemoveUserPasswordRequestBody": ".removeuserpasswordop", "RemoveUserPasswordRequestBodyTypedDict": ".removeuserpasswordop", "RemoveUserPasswordRequestTypedDict": ".removeuserpasswordop", + "ReplaceDirectoryGroupRoleMappingsMappings": ".replacedirectorygrouprolemappingsop", + "ReplaceDirectoryGroupRoleMappingsMappingsTypedDict": ".replacedirectorygrouprolemappingsop", + "ReplaceDirectoryGroupRoleMappingsRequest": ".replacedirectorygrouprolemappingsop", + "ReplaceDirectoryGroupRoleMappingsRequestBody": ".replacedirectorygrouprolemappingsop", + "ReplaceDirectoryGroupRoleMappingsRequestBodyTypedDict": ".replacedirectorygrouprolemappingsop", + "ReplaceDirectoryGroupRoleMappingsRequestTypedDict": ".replacedirectorygrouprolemappingsop", "ReplaceOrganizationMetadataRequest": ".replaceorganizationmetadataop", "ReplaceOrganizationMetadataRequestBody": ".replaceorganizationmetadataop", "ReplaceOrganizationMetadataRequestBodyTypedDict": ".replaceorganizationmetadataop", @@ -4972,6 +5125,8 @@ "RoleSetItemTypedDict": ".rolesetitem", "RoleSets": ".rolesets", "RoleSetsTypedDict": ".rolesets", + "RotateDirectoryAPIKeyRequest": ".rotatedirectoryapikeyop", + "RotateDirectoryAPIKeyRequestTypedDict": ".rotatedirectoryapikeyop", "RotateMachineSecretKeyRequest": ".rotatemachinesecretkeyop", "RotateMachineSecretKeyRequestBody": ".rotatemachinesecretkeyop", "RotateMachineSecretKeyRequestBodyTypedDict": ".rotatemachinesecretkeyop", @@ -5127,6 +5282,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/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/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..52857c9d 100644 --- a/src/clerk_backend_api/models/createuserop.py +++ b/src/clerk_backend_api/models/createuserop.py @@ -152,7 +152,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. @@ -318,7 +318,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. 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/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/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/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/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/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..9692f30d 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 diff --git a/src/clerk_backend_api/scimdirectories.py b/src/clerk_backend_api/scimdirectories.py index 220d0026..5a10f574 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 @@ -1137,14 +1137,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 @@ -1234,9 +1234,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 +1326,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 +1421,10 @@ 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. + Creates a new SCIM group to organization role mapping for a directory. Group role mapping must be enabled on the directory. - :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 +1536,10 @@ 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. + Creates a new SCIM group to organization role mapping for a directory. Group role mapping must be enabled on the directory. - :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 @@ -1654,7 +1654,7 @@ def replace_group_role_mappings( precedence 1). Passing an empty array removes all mappings. Group role mapping must be enabled on the directory. - :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 @@ -1763,7 +1763,7 @@ async def replace_group_role_mappings_async( precedence 1). Passing an empty array removes all mappings. Group role mapping must be enabled on the directory. - :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 @@ -1870,7 +1870,7 @@ def delete_group_role_mapping( Deletes a single SCIM group role mapping. Group role mapping must be enabled on the directory. - :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 @@ -1968,7 +1968,7 @@ async def delete_group_role_mapping_async( Deletes a single SCIM group role mapping. Group role mapping must be enabled on the directory. - :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..f02a7fc5 100644 --- a/src/clerk_backend_api/users.py +++ b/src/clerk_backend_api/users.py @@ -25,6 +25,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 +125,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 @@ -326,7 +336,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. @@ -578,7 +588,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. @@ -1161,7 +1171,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 +1367,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 From 04cb0522fc24648de2610de565bffcab7c3af9df Mon Sep 17 00:00:00 2001 From: "speakeasy-github[bot]" <128539517+speakeasy-github[bot]@users.noreply.github.com> Date: Fri, 14 Aug 2026 00:29:32 +0000 Subject: [PATCH 2/2] empty commit to trigger [run-tests] workflow