diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 432bc986..bbf03fac 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: 19c77225c9b398357c88fdd1aa813ac8 + docChecksum: bd158406ac326f036448c41f9115c10d docVersion: "2026-05-12" - speakeasyVersion: 1.778.0 - generationVersion: 2.904.2 - releaseVersion: 6.0.1 - configChecksum: fe6acfe1dc4dfb910fe15cfba7ac3323 + speakeasyVersion: 1.784.0 + generationVersion: 2.911.0 + releaseVersion: 6.0.2 + configChecksum: f4e2d630a902d5cccc5bd347649bea6b repoURL: https://github.com/clerk/clerk-sdk-python.git installationURL: https://github.com/clerk/clerk-sdk-python.git published: true persistentEdits: - generation_id: cb1a1ed6-b00f-48d0-90f4-aea52ac0ec8c - pristine_commit_hash: dc94cac3747b68145eb85f47788a4bcf3a68121b - pristine_tree_hash: 9e23f0cfde7ee622871907fa6cdc356c9bf0e996 + generation_id: 62e807ba-8286-486a-8159-7ada592bb9c3 + pristine_commit_hash: 241a3f34bd6cf91a3531b772ee2d999a8d80e075 + pristine_tree_hash: 5fef5a9fb407fe0167307e031e149956dd6e0856 features: python: additionalDependencies: 1.1.0 @@ -39,8 +39,8 @@ features: nullables: 1.0.2 openEnums: 1.0.4 responseFormat: 1.1.0 - retries: 3.0.5 - sdkHooks: 1.2.1 + retries: 3.0.7 + sdkHooks: 1.2.2 unions: 3.1.6 uploadStreams: 1.0.3 trackedFiles: @@ -274,40 +274,12 @@ trackedFiles: pristine_git_object: 5c4b4bd245e9da656bf0f566da530b0f0c047392 docs/models/clerkerror.md: id: 37808372fb58 - last_write_checksum: sha1:56cf2c72da727631afaff30661076b7403960b1f - pristine_git_object: 9b4caf7f98be54782293970fadd7a4ea68c43cdf - docs/models/clerkerrorerrorenterpriseaccountmeta.md: - id: 6a193374f266 - last_write_checksum: sha1:01a33a92d30ae6158809c167e7c891c7e7ca3dab - pristine_git_object: e12e48d273f0baf6dc79afc060eb2bb4ce5fa1ce - docs/models/clerkerrorerrorenterpriseaccountverificationmeta.md: - id: 61623cb64a01 - last_write_checksum: sha1:6f22bf2352ea0258239e7502f148544d57ed5b01 - pristine_git_object: af28d7d0c644923d22fadc9f417f0ed26a7f3a2f - docs/models/clerkerrorerrorexternalaccountwithverificationmeta.md: - id: e48eed675751 - last_write_checksum: sha1:95fe24d9995baa7cdc60e05cef4925dd46fdd7f4 - pristine_git_object: 498e597554ca06793299f5f9cff1ef78839d25a4 - docs/models/clerkerrorerrorexternalaccountwithverificationverificationmeta.md: - id: "834826456887" - last_write_checksum: sha1:9f043b122b64b9f54018060a7b2a2db492f4adcd - pristine_git_object: ef070e0d77b9bc6f659f4b18a2662d4807a88108 - docs/models/clerkerrorerrormeta.md: - id: d1002cdb9ec6 - last_write_checksum: sha1:99adcd69e14f9eb25a67d28a59cafe2b1b0c2e8f - pristine_git_object: e705a2f726658e2c29a6a6b3bb42788d3dee4318 - docs/models/clerkerrorerrorsamlaccountmeta.md: - id: c38a6ee836c4 - last_write_checksum: sha1:4821945ed376d5ca6368f283f97f49bb98f292c1 - pristine_git_object: 2fed9d861c374e00f7d59f3707c686c016cbdee5 + last_write_checksum: sha1:8e616f8685b8498d8b341035091125cdb2a69a8c + pristine_git_object: 1988e02b6e5e6fa8a04dd14f6a5694db71eab8d3 docs/models/clerkerrors.md: id: 16fd2c5299ee - last_write_checksum: sha1:eb4659a1e54091c42d9572a271cd535493ed68e8 - pristine_git_object: cbcac9a964648f21598d4acd23040ddcd4e0ca36 - docs/models/clerkerrorsmeta.md: - id: 8f93565bee8f - last_write_checksum: sha1:de0c09ae9132e602e7ec24b30d9a94f5128511a0 - pristine_git_object: c82450fb5b28ea15c6ace00ab34b418cda115d42 + last_write_checksum: sha1:2fb2591b266fb598bcfaf22f7b15fc9d1aab12a1 + pristine_git_object: 0a6e62e4eb7ca685e1ee4499c9c8905a42f02f34 docs/models/client.md: id: 67a7a58f44b4 last_write_checksum: sha1:e869f51c209bce6c247e7365e2a942d58d3abe4b @@ -718,8 +690,8 @@ trackedFiles: pristine_git_object: 56b7fd148fab8f677d5e6c1e0984cb1e76d1a435 docs/models/createorganizationdomainrequestbody.md: id: 2008a398a249 - last_write_checksum: sha1:2bc384d8a3622559aba37be0fdd076c951aba1d9 - pristine_git_object: 66443afaf00a0a700a82e3fba875a386f5d5ef99 + last_write_checksum: sha1:1f501feb3fad305b3de2594323ff30493fea8392 + pristine_git_object: 4f21b32decb31f381bd6ac10998d13d1ea60e1c4 docs/models/createorganizationinvitationbulkrequest.md: id: 8e5eeadfd24d last_write_checksum: sha1:4d51d6bded933764dd07267bb837ff87b2297572 @@ -1042,8 +1014,8 @@ trackedFiles: pristine_git_object: 8b480db4fa55419c77ae61fa905dc91152c0d18b docs/models/enrollmentmode.md: id: 4fc21918c24b - last_write_checksum: sha1:f50ea90c3c8c03a882c18b82a8e10ac52c9e5a47 - pristine_git_object: 91902752727ab915de72cc96f76bb065bc82bf87 + last_write_checksum: sha1:745e273965c395f6f21f595df8c84c11707987a0 + pristine_git_object: 10af00855114a2be91046453700dc32b0a62afe6 docs/models/enterpriseaccount.md: id: 1021de4770be last_write_checksum: sha1:e0a66d11c9eb108ca572f57aaf458539c4d12139 @@ -1106,12 +1078,8 @@ trackedFiles: pristine_git_object: 426585bfa40ded1167119644ab24890026c279f9 docs/models/errorclerkerror.md: id: 69dfb23789e4 - last_write_checksum: sha1:361ad48720fd71cc6385557da5c5960b781cb9c8 - pristine_git_object: 6ee6750888a2c9d7c8a89833c25cc54234e2760a - docs/models/errormeta.md: - id: ee4ec4c0dbc4 - last_write_checksum: sha1:74bf9c9aeb68bd55bf2755bd8ca361ad4a3e3d87 - pristine_git_object: e498afa4b687e2d1c1abfa0d7b0fedd1d51002a0 + last_write_checksum: sha1:a88dd873933693478d700af74558f5587a55e990 + pristine_git_object: 4962f77b68c4682115e4745d9968b759c913e527 docs/models/errors.md: id: 09a4da1e2f9e last_write_checksum: sha1:206c8d0cdd830f25ad8198abc336e31a9a5ba2e4 @@ -1554,8 +1522,8 @@ trackedFiles: pristine_git_object: 6f3654f43b6d980761ed3c4670f90a2cc0d691a9 docs/models/listallorganizationdomainsrequest.md: id: 8423270223c8 - last_write_checksum: sha1:f34527f29c2fd63dd107ec1b6bc4eaa3c957302a - pristine_git_object: 6191ba434098a2b152e400c13289344d689b6215 + last_write_checksum: sha1:0f0926ca93203e3b139c4ad69a1fb5efbd42e5e8 + pristine_git_object: f7abc46568da9a407c91a04bbf0cafbfd0cf2c9c docs/models/listallowlistidentifiersrequest.md: id: 66ad0f5fad87 last_write_checksum: sha1:c2873fc83fe41d99dc53084f66b3b05451b8c26a @@ -1602,8 +1570,8 @@ trackedFiles: pristine_git_object: 215fb5699807986fd7ea3e389826a5c648f7a44d docs/models/listorganizationdomainsrequest.md: id: 02c1f0ce56ab - last_write_checksum: sha1:9f0e05d4bc59a80bca8758df7af9a600ad92641c - pristine_git_object: 6c5aa142924734292c911817aa20fe21ef694419 + last_write_checksum: sha1:d3dedff453fa818a3a9b9ac3da0244e45ee7443a + pristine_git_object: ca65f84d70f4a4cff7b42b44adc756e88254f031 docs/models/listorganizationinvitationsqueryparamstatus.md: id: 5c6517fb97a5 last_write_checksum: sha1:83302351fac9d2c71746f85f78611c884dfcf975 @@ -1732,10 +1700,6 @@ trackedFiles: id: f50365412494 last_write_checksum: sha1:aeb202644c669b1033633bf29e546eeda3bb7f48 pristine_git_object: 565810f438f2ce1f396e7ef34860cb10e6f8ec02 - docs/models/meta.md: - id: b5731935642a - last_write_checksum: sha1:15ebd1eb87ca29dca40f7a85b187c7119e9bc5f8 - pristine_git_object: 93f98d6ad4d1504e6a3849971be592f31f4eea76 docs/models/nextaction.md: id: 7c8a867e5482 last_write_checksum: sha1:41e0a715b0ebaad962078ce65ebddb36687e740d @@ -2078,8 +2042,8 @@ trackedFiles: pristine_git_object: 2e113f48ea54618739c1040356deae926920e0ef docs/models/queryparamenrollmentmode.md: id: 3a43269f72ee - last_write_checksum: sha1:3bbe0a990e2d3d1538e9a5608b0a1c4afb075157 - pristine_git_object: a318c83a5a737b86f3f46eacb6dfc648ec83a2e8 + last_write_checksum: sha1:e1066aca2d1d59461ee3744deb4bc13122d8c09f + pristine_git_object: fefab90ecc8f9eedb7db7ad268a6a9278af725ae docs/models/queryparampayertype.md: id: b2f1e150103d last_write_checksum: sha1:6d0bd4a87f0a0c1442cc4b27e625797ef0878f8c @@ -2930,8 +2894,8 @@ trackedFiles: pristine_git_object: b67a2990b893389c16fc3484bd46759bac7fe639 docs/models/updateorganizationdomainrequestbody.md: id: 740dd4a1631e - last_write_checksum: sha1:0e3fccad651450367e08a60451c492acaabc5c84 - pristine_git_object: 507bfd3b527656250a8a7fc889e9113cfe8192f6 + last_write_checksum: sha1:8decc1960d1065fde7c7e2d615e9cdc8547e021a + pristine_git_object: e3e368a7d732dc1207977bdd3b40ac8c6c1a4299 docs/models/updateorganizationmembershipmetadatarequest.md: id: dc497ede0378 last_write_checksum: sha1:cd8c8c062bcfeaad2a5ac05b69c5d1b626d57627 @@ -3174,8 +3138,8 @@ trackedFiles: pristine_git_object: 8c5f1bb3c5dd31a7fab7afd309afe5a842cebbf6 docs/models/verificationgoogleonetaperrorclerkerror.md: id: 10131e87b3f0 - last_write_checksum: sha1:0bfaac999719fad5a1fb8ad9c516fa769e81740e - pristine_git_object: 8de8eace7442362140fb2841cafeabd71bd1b24a + last_write_checksum: sha1:26f676714ce099c422826c32246b2d4492cfe617 + pristine_git_object: 5ff62314e27001e1eede5a5b581110bb4b04e29a docs/models/verificationgoogleonetapverificationerror.md: id: 2783e1e19751 last_write_checksum: sha1:54a48fa8643dd3a1d69a47c59b98db9c3b885e99 @@ -3198,12 +3162,12 @@ trackedFiles: pristine_git_object: f152e68b9981dd06bb233dc6ccda9ce99c23ae8f docs/models/verificationoautherrorclerkerror.md: id: f928ca8fcd24 - last_write_checksum: sha1:e799706bbb01204827db018efb74bc16bd7cf2df - pristine_git_object: d4aceb6b4adc5f20b3124262feee5dc96b2f920d + last_write_checksum: sha1:34bed4d1a9006ac59002a3f25fce95d85cd5e2a3 + pristine_git_object: 2ed5085c1c8b12915280b8691d7da71d4021ba05 docs/models/verificationoautherrorenterpriseaccountclerkerror.md: id: fafebe046c8b - last_write_checksum: sha1:b5110ce2b845e7d4bc235de40fe17ab36a7788e6 - pristine_git_object: a4ed5d6aa3e6316ef9c63c48dcec4737dccbf1be + last_write_checksum: sha1:83fad7662bc90ba17039b2b38843525a90a75316 + pristine_git_object: cb0fd23926bf1338b135b06a333d638510ab1d02 docs/models/verificationoauthverificationenterpriseaccounterror.md: id: 82a1c55d7b59 last_write_checksum: sha1:a456d00b1a26cac9ad8cdf95d12496546b73d627 @@ -3278,16 +3242,16 @@ trackedFiles: pristine_git_object: 9a00d92979376c403b036348c351f3c4ce56c13d docs/models/verificationsamlerrorclerkerror.md: id: a70177ff0d77 - last_write_checksum: sha1:c5766f0540828a0a61f7f9adad7324994e8c5d02 - pristine_git_object: 2600927757949b05776101c4ac00d46c1539ab49 + last_write_checksum: sha1:9bb20f3a6e2156a7233b1d6fd2e9c93deb6f6a6a + pristine_git_object: 77682e426c18455cd24e278cd0a4e7b9d7d2850d docs/models/verificationsamlerrorenterpriseaccountclerkerror.md: id: adb0465af148 - last_write_checksum: sha1:298dfaf7d8e8ec7345638e9e83c15923123f5c9f - pristine_git_object: 6ae3d8e13bf75ef180d4ab2355c869aeb642e4a7 + last_write_checksum: sha1:9bfc6fd96470c7ec9325379698edbfa47a792a80 + pristine_git_object: b89f8240be3cc5d43928505392f9cc76905acfea docs/models/verificationsamlerrorsamlaccountclerkerror.md: id: b8c46eca04a7 - last_write_checksum: sha1:b627bf7f712517399880abe9697e0934ecf0d8f0 - pristine_git_object: 13b5cb7aa1492e7d0dc103552185d1f1c978673e + last_write_checksum: sha1:aa93038367338d6652261d36a14a3f6ef5c76a6a + pristine_git_object: df96b967cc8603177efff11b030c9b2316a43b01 docs/models/verificationsamlverificationemailaddresssaml.md: id: cacd9aa6490c last_write_checksum: sha1:95ee6e3863ab2d0134c0e7cf956dea7b893753fd @@ -3678,8 +3642,8 @@ trackedFiles: pristine_git_object: 42bad19b6651c3a4a29e46065cc43b92dbafeddc docs/sdks/organizationdomainssdk/README.md: id: 76a0872c137f - last_write_checksum: sha1:5b4ded551b03861593f7d66fec8bb2bcd88da653 - pristine_git_object: b4ce48cf225d609efaef5f9376764cb05bd68915 + last_write_checksum: sha1:3192f245a59c1d091ce221c4e62bf8ba76cd16d3 + pristine_git_object: 58bbd5745dfc5dba7851432188291d7db20f3f2d docs/sdks/organizationinvitationssdk/README.md: id: a75042d035e8 last_write_checksum: sha1:5b8d5a65af4dd05e3947662f1af94650ecd0fe4a @@ -3742,8 +3706,8 @@ trackedFiles: pristine_git_object: 3b5b06e9e6e00d8c21aa5de0fa5754acec7173d5 docs/sdks/users/README.md: id: 5d80027045fe - last_write_checksum: sha1:c41e2578764578d6792364ca1c5adfdb77cc621a - pristine_git_object: de4f37112e86d72bce405afee0684dad33a30a7b + last_write_checksum: sha1:aefb1439923d45a865463be976ce6acef4a729cc + pristine_git_object: 0f43009087ddefbe4f1601c324c4ef15ca0889c8 docs/sdks/waitlistentriessdk/README.md: id: be78acbbb2f4 last_write_checksum: sha1:08794f1399c6b81cf83ef513816222cb5d12f53c @@ -3766,8 +3730,8 @@ trackedFiles: pristine_git_object: 7fd8db13ad9399ab075a5fb70e6da17525ad3ed0 pyproject.toml: id: 5d07e7d72637 - last_write_checksum: sha1:75412ea1d36bcab69bf5f1c60af01f9dc38ca15f - pristine_git_object: 0677a7544bd71fb62a10f7285ae5aace2e76ec66 + last_write_checksum: sha1:076af33934be68acbf53a30c543f2db63fe751d7 + pristine_git_object: a0b879cfe3625df1b099d58b54fe08fcb3631e30 scripts/prepare_readme.py: id: e0c5957a6035 last_write_checksum: sha1:419f10ccc385a29136e599315b61a0aa7a1c3e15 @@ -3794,8 +3758,8 @@ trackedFiles: pristine_git_object: 4926429d3dfb2c34589715971acb070ed3756559 src/clerk_backend_api/_version.py: id: 9bcb16a88e08 - last_write_checksum: sha1:3610187b4306de73e4c11f2e3bdeb35d51122bff - pristine_git_object: c5e9e88a7e402d16746577e5d9940633c311fc64 + last_write_checksum: sha1:a1c31084721653b57a9073e98a6653d5acbf7636 + pristine_git_object: d0d91c0b019e1406733d8759371b746e4b8b90bd src/clerk_backend_api/actortokens.py: id: 3b3f89863233 last_write_checksum: sha1:3b904736e9137a0802a031e590dcb505f9ed0ba6 @@ -3890,8 +3854,8 @@ trackedFiles: pristine_git_object: 1487f7397b93643052fce28231aefc25905fb076 src/clerk_backend_api/models/__init__.py: id: 97d9388d85c1 - last_write_checksum: sha1:cf88ff2c844ca5e287113fe3824980c8fdcd8a45 - pristine_git_object: 4740ead9c0650bc89674455af23cfd9ec28d4452 + last_write_checksum: sha1:3915a7c217d323cfb5dc18de0c19a48ce2e79eee + pristine_git_object: ea6a2382b0df6f7c047fa6c44f4400d0ed2732e3 src/clerk_backend_api/models/_verificationresponse.py: id: 60d0443bfa2c last_write_checksum: sha1:fe16527d8fc007a482bfc55e6f3ccd67f407d7bf @@ -3978,12 +3942,12 @@ trackedFiles: pristine_git_object: 39f2e030f980f78c5c0f2ecd8030ce4d493f9ca5 src/clerk_backend_api/models/clerkerror.py: id: 2ccb21dde563 - last_write_checksum: sha1:85e4d7b652c239522d472b321e39f5749e121ec8 - pristine_git_object: dd3c123ecc3f6994c7a9b649100e57f689cba3ad + last_write_checksum: sha1:1025d9113a0942f90cca3e0723153f6efb92635c + pristine_git_object: 0a7859f36bdffe15b95940f0a75a000ebf900cff src/clerk_backend_api/models/clerkerrors.py: id: 6d281fef4fc7 - last_write_checksum: sha1:5aae5b16a119642aa3fef28537f02dc47959e3d8 - pristine_git_object: 7658c12b00359d59a39263571e84cf3f2cc18f9b + last_write_checksum: sha1:6ec076f8383a82de63947c0fa3d4aabdeb4e0a37 + pristine_git_object: 10d2accfaf0e14ab5f1e9bb16d4af792bedd7eaf src/clerk_backend_api/models/client.py: id: e9612d07140a last_write_checksum: sha1:550ae5a62ba3d0a68a01b079e09ba14cdeb8f4df @@ -4138,8 +4102,8 @@ trackedFiles: pristine_git_object: ecde431dd1e9d5ea8585905d15d8f8b8fe1704f2 src/clerk_backend_api/models/createorganizationdomainop.py: id: 5a6ae0dba9f8 - last_write_checksum: sha1:1788fded50a6c2ba3d715e6a5fcfd740ba49a039 - pristine_git_object: 572415433882a5e6f3b5518d455f92b5a23e4c5c + last_write_checksum: sha1:6602bd3044b0881b0d0ed73f4a421cb3317c89d0 + pristine_git_object: dc20a32dc14dac66c93fd61095b680a69b2722c7 src/clerk_backend_api/models/createorganizationinvitationbulkop.py: id: ac16d568c0ae last_write_checksum: sha1:e1759e1e36086a018500b46287897415c78b38b2 @@ -4322,12 +4286,12 @@ trackedFiles: pristine_git_object: 7c2cb9ffb835a0b7605b399091244417ff938c8f src/clerk_backend_api/models/emailaddress.py: id: 29df9abd37d1 - last_write_checksum: sha1:4fa3ee7ebb012ed3e62de05f89464c5692c4e52e - pristine_git_object: 7aba58d2afa59c55f14ef6c02d8ffbb28fab9b8f + last_write_checksum: sha1:be2e95d56b87a1bebc8957f198761cfb8b60ad81 + pristine_git_object: a407db7d9de6a923616ab2181ed37dd3190ab906 src/clerk_backend_api/models/enterpriseaccount.py: id: 76fc27f00649 - last_write_checksum: sha1:d070cdc2af8be851fbc1222dad8d7121a5977eee - pristine_git_object: 5e04264834b607fb0ec750249f89ed47569ae099 + last_write_checksum: sha1:774ac484333a64d53d709a12237e70cf8da7c5f1 + pristine_git_object: 00702cd8522c7a0f563b84a6eb863745598636bf src/clerk_backend_api/models/enterpriseconnection.py: id: 0045faf0e373 last_write_checksum: sha1:90ee1126d9c5ce1a1b7236987d27723ae761639d @@ -4358,8 +4322,8 @@ trackedFiles: pristine_git_object: e2bb51e244cd1a26f729b8224cdcd11164a507d1 src/clerk_backend_api/models/externalaccountwithverification.py: id: 79931be73b92 - last_write_checksum: sha1:81e528412f5cf8aeb2982c30cfd35fb0c1fcef24 - pristine_git_object: 59d85ad70e4a3ec035cae960d6f44dd50eeeaa40 + last_write_checksum: sha1:6b5d18eb13e76e434690d30ecd2fff6cf0294fb6 + pristine_git_object: 87be398e900d2cee0c88b622ac0f8b910297907c src/clerk_backend_api/models/featureresponse.py: id: 40a15826a18c last_write_checksum: sha1:84f8316b07acef97d9fd656c26de1f8412a1db1a @@ -4574,8 +4538,8 @@ trackedFiles: pristine_git_object: 2e30edd845289e450f5278f71491b5a890080aa1 src/clerk_backend_api/models/listallorganizationdomainsop.py: id: "199866500078" - last_write_checksum: sha1:ede3d4d15511cc99414da5bbe6e0bf226ad380ff - pristine_git_object: 8b28daa990d6b1eab9b48ab15be290ab61b8a0a6 + last_write_checksum: sha1:64b78d30b3d3c7587bd04c5f945f009144ee3348 + pristine_git_object: 4defa044911200a077cbff300e579c12774632d1 src/clerk_backend_api/models/listallowlistidentifiersop.py: id: 44ca21651421 last_write_checksum: sha1:4cec79f95de73339984720d7dbbd2e8016dfbfff @@ -4610,8 +4574,8 @@ trackedFiles: pristine_git_object: 2e0a53d0dbba346dbe198c3b62aa991229ebcfef src/clerk_backend_api/models/listorganizationdomainsop.py: id: 189f8d296b8c - last_write_checksum: sha1:1a2610c7ef181dbd2d673fb2a8c2bd71851f9e94 - pristine_git_object: 620c8bf3d0716a45e4887fbb8f97532691467d3a + last_write_checksum: sha1:17e5d7fbf18d48b0129718ce726d51e933c4f941 + pristine_git_object: 6c47e453405fe2f2c515cfaa6de9c0643df03971 src/clerk_backend_api/models/listorganizationinvitationsop.py: id: d7dfd455485d last_write_checksum: sha1:0deaf695f830146f0d7cfc89aa75be7a9b000a61 @@ -4722,8 +4686,8 @@ trackedFiles: pristine_git_object: e14ddfc94b626a51175a05dfa9cde4d473ff185d src/clerk_backend_api/models/organizationdomain.py: id: 627b7a1a5e5a - last_write_checksum: sha1:712e4e0c2b711111a51a301a6ccd97575646e900 - pristine_git_object: c15741b2fecd97882cc7d9f1b116c8f4e3907860 + last_write_checksum: sha1:2271e3ee265687becf215a4cb38bb10c90e610f6 + pristine_git_object: 4cff8405ecf907aaab9476a0e2f1d4268dacafe5 src/clerk_backend_api/models/organizationdomains.py: id: 7bd99087d029 last_write_checksum: sha1:d3fed2db47a386709a3f89e37707a5ece87fe3d6 @@ -4946,8 +4910,8 @@ trackedFiles: pristine_git_object: 4c0586ea03498ce190ecc66ae7e25405f4878633 src/clerk_backend_api/models/samlaccount.py: id: 49087d16fc62 - last_write_checksum: sha1:649734376b16cba21e19f9443e7e53d5a84eecf9 - pristine_git_object: 0be7a6feab6e8c7dcb3b02af19b308c1296b4df1 + last_write_checksum: sha1:da0fbcac07fea799716c928c3fe0e2433cec706a + pristine_git_object: 0e3b6c5c5d9fa6f47147194c8953f44e35d5dc5d src/clerk_backend_api/models/samlconnection.py: id: a329c81c42f3 last_write_checksum: sha1:75af7cff9d93e6a3da5b8bd8e7fe9bfd03b768dd @@ -5122,8 +5086,8 @@ trackedFiles: pristine_git_object: 4775edcdb8659a808f1f54bd1bd334c91eb7b195 src/clerk_backend_api/models/updateorganizationdomainop.py: id: f821cc2481cf - last_write_checksum: sha1:9597106f1033c03c83275e126e503d23521c1dda - pristine_git_object: 44b6a62a8d7206bb5e4795b106e2fc9f2f5f0cc2 + last_write_checksum: sha1:e8c1412653b2a51c4b222d3f3b801d1853c3574c + pristine_git_object: ad024fca04a145efbfd3466405434b3d6b846689 src/clerk_backend_api/models/updateorganizationmembershipmetadataop.py: id: 20595ae3f1a1 last_write_checksum: sha1:4d24811a2c48d34e2ec392b97ab6bbd24f89a32d @@ -5266,8 +5230,8 @@ trackedFiles: pristine_git_object: e7d771e5125e97be4c1cd97fe9a773228eb34f97 src/clerk_backend_api/organizationdomains_sdk.py: id: b3594639c697 - last_write_checksum: sha1:cb51ee7adbebea52d1496b3b8fb8f0b087437a29 - pristine_git_object: 44cb4e8188b2050a69254b88a0f4c1e2b350b8e0 + last_write_checksum: sha1:6b5cd4f0e43717542757808641a77763c8c065df + pristine_git_object: b420fe56d4f7294f05cf4ee815be6ef4d6e59067 src/clerk_backend_api/organizationinvitations_sdk.py: id: 4ff208f271e3 last_write_checksum: sha1:54e25fabeae538101ca4cd03124862f698c4c502 @@ -5354,8 +5318,8 @@ trackedFiles: pristine_git_object: a9a640a1a7048736383f96c67c6290c86bf536ee src/clerk_backend_api/users.py: id: 6f835640685a - last_write_checksum: sha1:3d53e41d7e22785a86eba0faf6159e2e15eea89f - pristine_git_object: ba0c42298427e762fe1cfd71ec5ae4999ef9fa26 + last_write_checksum: sha1:8286c05bcc7b03af1c804694a2537f0674556605 + pristine_git_object: 41603abc6be4398897a6b3e8ab3529b393409af1 src/clerk_backend_api/utils/__init__.py: id: a8b67e49e50a last_write_checksum: sha1:1970816f2234ecb8785798240b0edced961de971 @@ -5406,8 +5370,8 @@ trackedFiles: pristine_git_object: 591415af8e64baa410627b507d2740afb5387d13 src/clerk_backend_api/utils/retries.py: id: c8a5b5c54d76 - last_write_checksum: sha1:471372f5c5d1dd5583239c9cf3c75f1b636e5d87 - pristine_git_object: af07d4e941007af4213c5ec9047ef8a2fca04e5e + last_write_checksum: sha1:3585b891142f30a597fbf7a2f0340700babef8e4 + pristine_git_object: ca7b59efebbbd9545744d0207ef42725c4cc5143 src/clerk_backend_api/utils/security.py: id: ed2da5f2f80c last_write_checksum: sha1:c11eef495b6aaa249178c24c796940cc540b7a00 @@ -8219,6 +8183,7 @@ examples: 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.clients.list()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.clients.verify()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.clients.get()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.email_addresses.create()`: \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.email_addresses.delete()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.email_addresses.update()`: \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 * `response.verification` **Changed** (Breaking ⚠️)\n * `error` **Changed** (Breaking ⚠️)\n* `clerk.phone_numbers.create()`: `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()`: `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()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.users.get_billing_credit_balance()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.users.adjust_billing_credit_balance()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.users.get_o_auth_access_token()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.users.get_organization_memberships()`: `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()`: `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.instance_settings.update_o_auth_application_settings()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.instance_settings.change_domain()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.instance_settings.get_organization_settings()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.instance_settings.update_organization_settings()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.instance_settings.update_instance_protect()`: `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()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organizations.get_billing_credit_balance()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organizations.adjust_billing_credit_balance()`: `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()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_memberships.list()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_memberships.update()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_memberships.delete()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_memberships.update_metadata()`: `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()`: `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()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.saml_connections.create()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.saml_connections.get()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.saml_connections.update()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.saml_connections.delete()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.enterprise_connections.list()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.enterprise_connections.create()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.enterprise_connections.get()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.enterprise_connections.update()`: `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()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.billing.cancel_subscription_item()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.billing.extend_subscription_item_free_trial()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.billing.create_price_transition()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.billing.list_statements()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.billing.get_statement()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.billing.get_statement_payment_attempts()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_permissions.list()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_permissions.create()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_permissions.get()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_permissions.update()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.organization_permissions.delete()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.role_sets.list()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.role_sets.create()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.role_sets.get()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.role_sets.update()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.role_sets.replace()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.role_sets.add_roles()`: `error` **Changed** (Breaking ⚠️)\n* `clerk.role_sets.replace_role()`: `error` **Changed** (Breaking ⚠️)\n" generatedFiles: - .gitattributes - .vscode/settings.json diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 18e7eeb5..e65c7fc3 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -29,7 +29,7 @@ generation: generateNewTests: false skipResponseBodyAssertions: false python: - version: 6.0.1 + version: 6.0.2 additionalDependencies: dev: pytest: ^8.3.3 @@ -51,6 +51,7 @@ python: description: Python Client SDK for clerk.dev enableCustomCodeRegions: true enumFormat: enum + errorSchemaValidation: true eventStreamClassNames: async: EventStreamAsync sync: EventStream @@ -91,6 +92,7 @@ python: pytestTimeout: 0 rawResponseHelpers: false responseFormat: flat + responseSchemaValidation: true sseFlatResponse: false templateVersion: v2 useAsyncHooks: false diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 070660d1..3d45010b 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -1,9 +1,9 @@ -speakeasyVersion: 1.778.0 +speakeasyVersion: 1.784.0 sources: clerk-openapi: sourceNamespace: clerk-openapi - sourceRevisionDigest: sha256:96ac7c88f394e98ad840bc4562cb364f44f676023ec99e935d58a22f0d35319c - sourceBlobDigest: sha256:9ec12f08a39e514255abb67095affd7effd32d748bedaf3ead0889d3d1f0de11 + sourceRevisionDigest: sha256:c5a6d96ddd6aeeac4a5cb090bcabb15c8a23f5f0b31aeba9f10a299ca8acb905 + sourceBlobDigest: sha256:8b2ff7232384e78f68bc26862b400fb471e38fbd954d8fe66178925147ed6316 tags: - latest - "2026-05-12" @@ -11,10 +11,10 @@ targets: clerk-sdk-python: source: clerk-openapi sourceNamespace: clerk-openapi - sourceRevisionDigest: sha256:96ac7c88f394e98ad840bc4562cb364f44f676023ec99e935d58a22f0d35319c - sourceBlobDigest: sha256:9ec12f08a39e514255abb67095affd7effd32d748bedaf3ead0889d3d1f0de11 + sourceRevisionDigest: sha256:c5a6d96ddd6aeeac4a5cb090bcabb15c8a23f5f0b31aeba9f10a299ca8acb905 + sourceBlobDigest: sha256:8b2ff7232384e78f68bc26862b400fb471e38fbd954d8fe66178925147ed6316 codeSamplesNamespace: clerk-openapi-python-code-samples - codeSamplesRevisionDigest: sha256:ba8996a51d6bb120fde5168fc9c1039ef6515ce2fa82fff28e1b1ba7ecfa29dc + codeSamplesRevisionDigest: sha256:9b069f216fc01d0823d5eb604d0bed74b149605bc08738a8fff6f1e205e8d5f2 workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/README-PYPI.md b/README-PYPI.md index f7fdb429..702e791a 100644 --- a/README-PYPI.md +++ b/README-PYPI.md @@ -713,7 +713,7 @@ with Clerk( # Depending on the method different errors may be thrown if isinstance(e, models.ClerkErrors): print(e.data.errors) # List[clerk_backend_api.ClerkError] - print(e.data.meta) # Optional[clerk_backend_api.ClerkErrorsMeta] + print(e.data.meta) # Optional[Dict[str, Any]] ``` ### Error Classes diff --git a/README.md b/README.md index 221cfefa..b72d4c1d 100644 --- a/README.md +++ b/README.md @@ -713,7 +713,7 @@ with Clerk( # Depending on the method different errors may be thrown if isinstance(e, models.ClerkErrors): print(e.data.errors) # List[clerk_backend_api.ClerkError] - print(e.data.meta) # Optional[clerk_backend_api.ClerkErrorsMeta] + print(e.data.meta) # Optional[Dict[str, Any]] ``` ### Error Classes diff --git a/RELEASES.md b/RELEASES.md index 1cbb62d8..dc4a36e5 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -638,4 +638,14 @@ Based on: ### Generated - [python v6.0.1] . ### Releases -- [PyPI v6.0.1] https://pypi.org/project/clerk-backend-api/6.0.1 - . \ No newline at end of file +- [PyPI v6.0.1] https://pypi.org/project/clerk-backend-api/6.0.1 - . + +## 2026-06-20 00:54:50 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.784.0 (2.911.0) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v6.0.2] . +### Releases +- [PyPI v6.0.2] https://pypi.org/project/clerk-backend-api/6.0.2 - . \ No newline at end of file diff --git a/docs/models/clerkerror.md b/docs/models/clerkerror.md index 9b4caf7f..1988e02b 100644 --- a/docs/models/clerkerror.md +++ b/docs/models/clerkerror.md @@ -8,4 +8,4 @@ | `message` | *str* | :heavy_check_mark: | N/A | Invalid input | | `long_message` | *str* | :heavy_check_mark: | N/A | The input provided does not meet the requirements. | | `code` | *str* | :heavy_check_mark: | N/A | 400_bad_request | -| `meta` | [Optional[models.Meta]](../models/meta.md) | :heavy_minus_sign: | N/A | {} | \ No newline at end of file +| `meta` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | {} | \ No newline at end of file diff --git a/docs/models/clerkerrorerrorenterpriseaccountmeta.md b/docs/models/clerkerrorerrorenterpriseaccountmeta.md deleted file mode 100644 index e12e48d2..00000000 --- a/docs/models/clerkerrorerrorenterpriseaccountmeta.md +++ /dev/null @@ -1,7 +0,0 @@ -# ClerkErrorErrorEnterpriseAccountMeta - - -## Fields - -| Field | Type | Required | Description | -| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/clerkerrorerrorenterpriseaccountverificationmeta.md b/docs/models/clerkerrorerrorenterpriseaccountverificationmeta.md deleted file mode 100644 index af28d7d0..00000000 --- a/docs/models/clerkerrorerrorenterpriseaccountverificationmeta.md +++ /dev/null @@ -1,7 +0,0 @@ -# ClerkErrorErrorEnterpriseAccountVerificationMeta - - -## Fields - -| Field | Type | Required | Description | -| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/clerkerrorerrorexternalaccountwithverificationmeta.md b/docs/models/clerkerrorerrorexternalaccountwithverificationmeta.md deleted file mode 100644 index 498e5975..00000000 --- a/docs/models/clerkerrorerrorexternalaccountwithverificationmeta.md +++ /dev/null @@ -1,7 +0,0 @@ -# ClerkErrorErrorExternalAccountWithVerificationMeta - - -## Fields - -| Field | Type | Required | Description | -| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/clerkerrorerrorexternalaccountwithverificationverificationmeta.md b/docs/models/clerkerrorerrorexternalaccountwithverificationverificationmeta.md deleted file mode 100644 index ef070e0d..00000000 --- a/docs/models/clerkerrorerrorexternalaccountwithverificationverificationmeta.md +++ /dev/null @@ -1,7 +0,0 @@ -# ClerkErrorErrorExternalAccountWithVerificationVerificationMeta - - -## Fields - -| Field | Type | Required | Description | -| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/clerkerrorerrormeta.md b/docs/models/clerkerrorerrormeta.md deleted file mode 100644 index e705a2f7..00000000 --- a/docs/models/clerkerrorerrormeta.md +++ /dev/null @@ -1,7 +0,0 @@ -# ClerkErrorErrorMeta - - -## Fields - -| Field | Type | Required | Description | -| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/clerkerrorerrorsamlaccountmeta.md b/docs/models/clerkerrorerrorsamlaccountmeta.md deleted file mode 100644 index 2fed9d86..00000000 --- a/docs/models/clerkerrorerrorsamlaccountmeta.md +++ /dev/null @@ -1,7 +0,0 @@ -# ClerkErrorErrorSAMLAccountMeta - - -## Fields - -| Field | Type | Required | Description | -| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/clerkerrors.md b/docs/models/clerkerrors.md index cbcac9a9..0a6e62e4 100644 --- a/docs/models/clerkerrors.md +++ b/docs/models/clerkerrors.md @@ -8,4 +8,4 @@ Request was not successful | Field | Type | Required | Description | Example | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `errors` | List[[models.ClerkError](../models/clerkerror.md)] | :heavy_check_mark: | N/A | [
{
"message": "Invalid input",
"long_message": "The input provided does not meet the requirements.",
"code": "400_bad_request",
"clerk_trace_id": "trace_123456789abcd"
}
] | -| `meta` | [Optional[models.ClerkErrorsMeta]](../models/clerkerrorsmeta.md) | :heavy_minus_sign: | N/A | {} | \ No newline at end of file +| `meta` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | {} | \ No newline at end of file diff --git a/docs/models/clerkerrorsmeta.md b/docs/models/clerkerrorsmeta.md deleted file mode 100644 index c82450fb..00000000 --- a/docs/models/clerkerrorsmeta.md +++ /dev/null @@ -1,7 +0,0 @@ -# ClerkErrorsMeta - - -## Fields - -| Field | Type | Required | Description | -| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/createorganizationdomainrequestbody.md b/docs/models/createorganizationdomainrequestbody.md index 66443afa..4f21b32d 100644 --- a/docs/models/createorganizationdomainrequestbody.md +++ b/docs/models/createorganizationdomainrequestbody.md @@ -3,8 +3,8 @@ ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | -| `name` | *Optional[str]* | :heavy_minus_sign: | The name of the new domain | -| `enrollment_mode` | *Optional[str]* | :heavy_minus_sign: | The enrollment_mode for the new domain. This can be `automatic_invitation`, `automatic_suggestion` or `manual_invitation` | -| `verified` | *OptionalNullable[bool]* | :heavy_minus_sign: | The status of domain's verification. Defaults to true | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | +| `name` | *Optional[str]* | :heavy_minus_sign: | The name of the new domain | +| `enrollment_mode` | *Optional[str]* | :heavy_minus_sign: | The enrollment_mode for the new domain. This can be `automatic_invitation`, `automatic_suggestion`, `manual_invitation` or `enterprise_sso` | +| `verified` | *OptionalNullable[bool]* | :heavy_minus_sign: | The status of domain's verification. Defaults to true | \ No newline at end of file diff --git a/docs/models/enrollmentmode.md b/docs/models/enrollmentmode.md index 91902752..10af0085 100644 --- a/docs/models/enrollmentmode.md +++ b/docs/models/enrollmentmode.md @@ -17,4 +17,5 @@ value = EnrollmentMode.MANUAL_INVITATION | ---------------------- | ---------------------- | | `MANUAL_INVITATION` | manual_invitation | | `AUTOMATIC_INVITATION` | automatic_invitation | -| `AUTOMATIC_SUGGESTION` | automatic_suggestion | \ No newline at end of file +| `AUTOMATIC_SUGGESTION` | automatic_suggestion | +| `ENTERPRISE_SSO` | enterprise_sso | \ No newline at end of file diff --git a/docs/models/errorclerkerror.md b/docs/models/errorclerkerror.md index 6ee67508..4962f77b 100644 --- a/docs/models/errorclerkerror.md +++ b/docs/models/errorclerkerror.md @@ -3,9 +3,9 @@ ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | -| `message` | *str* | :heavy_check_mark: | N/A | Invalid input | -| `long_message` | *str* | :heavy_check_mark: | N/A | The input provided does not meet the requirements. | -| `code` | *str* | :heavy_check_mark: | N/A | 400_bad_request | -| `meta` | [Optional[models.ErrorMeta]](../models/errormeta.md) | :heavy_minus_sign: | N/A | {} | \ No newline at end of file +| Field | Type | Required | Description | Example | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `message` | *str* | :heavy_check_mark: | N/A | Invalid input | +| `long_message` | *str* | :heavy_check_mark: | N/A | The input provided does not meet the requirements. | +| `code` | *str* | :heavy_check_mark: | N/A | 400_bad_request | +| `meta` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | {} | \ No newline at end of file diff --git a/docs/models/errormeta.md b/docs/models/errormeta.md deleted file mode 100644 index e498afa4..00000000 --- a/docs/models/errormeta.md +++ /dev/null @@ -1,7 +0,0 @@ -# ErrorMeta - - -## Fields - -| Field | Type | Required | Description | -| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/listallorganizationdomainsrequest.md b/docs/models/listallorganizationdomainsrequest.md index 6191ba43..f7abc465 100644 --- a/docs/models/listallorganizationdomainsrequest.md +++ b/docs/models/listallorganizationdomainsrequest.md @@ -7,7 +7,7 @@ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `organization_id` | *Optional[str]* | :heavy_minus_sign: | The ID of the organization to filter domains by | | | `verified` | [Optional[models.Verified]](../models/verified.md) | :heavy_minus_sign: | Filter by verification status | | -| `enrollment_mode` | List[[models.QueryParamEnrollmentMode](../models/queryparamenrollmentmode.md)] | :heavy_minus_sign: | Filter by enrollment mode | | +| `enrollment_mode` | List[[models.QueryParamEnrollmentMode](../models/queryparamenrollmentmode.md)] | :heavy_minus_sign: | Filter by enrollment mode. Prefix a value with `-` to exclude it instead
(e.g. `-enterprise_sso`). Include and exclude filters can be combined and compose as AND. | | | `query` | *Optional[str]* | :heavy_minus_sign: | Search domains by name or organization ID.
If the query starts with "org_", it will search by exact organization ID match.
Otherwise, it performs a case-insensitive partial match on the domain name.

Note: An empty string or whitespace-only value is not allowed and will result in a validation error.
| | | `domains` | List[*str*] | :heavy_minus_sign: | Filter by exact domain names. Accepts multiple values (e.g. domains=example.com&domains=test.org). | | | `order_by` | *Optional[str]* | :heavy_minus_sign: | Allows to return organization domains in a particular order.
At the moment, you can order the returned domains by their `name` or `created_at`.
In order to specify the direction, you can use the `+/-` symbols prepended to the property to order by.
For example, if you want domains 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.
Defaults to `-created_at`.
| | diff --git a/docs/models/listorganizationdomainsrequest.md b/docs/models/listorganizationdomainsrequest.md index 6c5aa142..ca65f84d 100644 --- a/docs/models/listorganizationdomainsrequest.md +++ b/docs/models/listorganizationdomainsrequest.md @@ -3,10 +3,10 @@ ## Fields -| Field | Type | Required | Description | Example | -| ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | -| `organization_id` | *str* | :heavy_check_mark: | The organization ID. | | -| `verified` | *Optional[str]* | :heavy_minus_sign: | Filter domains by their verification status. `true` or `false` | | -| `enrollment_mode` | *Optional[str]* | :heavy_minus_sign: | Filter domains by their enrollment mode | | -| `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 +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `organization_id` | *str* | :heavy_check_mark: | The organization ID. | | +| `verified` | *Optional[str]* | :heavy_minus_sign: | Filter domains by their verification status. `true` or `false` | | +| `enrollment_mode` | *Optional[str]* | :heavy_minus_sign: | Filter domains by their enrollment mode. Accepts `automatic_invitation`, `automatic_suggestion`, `manual_invitation` or `enterprise_sso`.
Prefix a value with `-` to exclude it instead (e.g. `-enterprise_sso`). Include and exclude filters can be combined and compose as AND. | | +| `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/meta.md b/docs/models/meta.md deleted file mode 100644 index 93f98d6a..00000000 --- a/docs/models/meta.md +++ /dev/null @@ -1,7 +0,0 @@ -# Meta - - -## Fields - -| Field | Type | Required | Description | -| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/queryparamenrollmentmode.md b/docs/models/queryparamenrollmentmode.md index a318c83a..fefab90e 100644 --- a/docs/models/queryparamenrollmentmode.md +++ b/docs/models/queryparamenrollmentmode.md @@ -11,8 +11,13 @@ value = QueryParamEnrollmentMode.MANUAL_INVITATION ## Values -| Name | Value | -| ---------------------- | ---------------------- | -| `MANUAL_INVITATION` | manual_invitation | -| `AUTOMATIC_INVITATION` | automatic_invitation | -| `AUTOMATIC_SUGGESTION` | automatic_suggestion | \ No newline at end of file +| Name | Value | +| ---------------------------- | ---------------------------- | +| `MANUAL_INVITATION` | manual_invitation | +| `AUTOMATIC_INVITATION` | automatic_invitation | +| `AUTOMATIC_SUGGESTION` | automatic_suggestion | +| `ENTERPRISE_SSO` | enterprise_sso | +| `MINUS_MANUAL_INVITATION` | -manual_invitation | +| `MINUS_AUTOMATIC_INVITATION` | -automatic_invitation | +| `MINUS_AUTOMATIC_SUGGESTION` | -automatic_suggestion | +| `MINUS_ENTERPRISE_SSO` | -enterprise_sso | \ No newline at end of file diff --git a/docs/models/updateorganizationdomainrequestbody.md b/docs/models/updateorganizationdomainrequestbody.md index 507bfd3b..e3e368a7 100644 --- a/docs/models/updateorganizationdomainrequestbody.md +++ b/docs/models/updateorganizationdomainrequestbody.md @@ -3,7 +3,7 @@ ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | -| `enrollment_mode` | *OptionalNullable[str]* | :heavy_minus_sign: | The enrollment_mode for the new domain. This can be `automatic_invitation`, `automatic_suggestion` or `manual_invitation` | -| `verified` | *OptionalNullable[bool]* | :heavy_minus_sign: | The status of the domain's verification | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | +| `enrollment_mode` | *OptionalNullable[str]* | :heavy_minus_sign: | The enrollment_mode for the new domain. This can be `automatic_invitation`, `automatic_suggestion`, `manual_invitation` or `enterprise_sso` | +| `verified` | *OptionalNullable[bool]* | :heavy_minus_sign: | The status of the domain's verification | \ No newline at end of file diff --git a/docs/models/verificationgoogleonetaperrorclerkerror.md b/docs/models/verificationgoogleonetaperrorclerkerror.md index 8de8eace..5ff62314 100644 --- a/docs/models/verificationgoogleonetaperrorclerkerror.md +++ b/docs/models/verificationgoogleonetaperrorclerkerror.md @@ -3,9 +3,9 @@ ## Fields -| Field | Type | Required | Description | Example | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `message` | *str* | :heavy_check_mark: | N/A | Invalid input | -| `long_message` | *str* | :heavy_check_mark: | N/A | The input provided does not meet the requirements. | -| `code` | *str* | :heavy_check_mark: | N/A | 400_bad_request | -| `meta` | [Optional[models.ClerkErrorErrorExternalAccountWithVerificationVerificationMeta]](../models/clerkerrorerrorexternalaccountwithverificationverificationmeta.md) | :heavy_minus_sign: | N/A | {} | \ No newline at end of file +| Field | Type | Required | Description | Example | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `message` | *str* | :heavy_check_mark: | N/A | Invalid input | +| `long_message` | *str* | :heavy_check_mark: | N/A | The input provided does not meet the requirements. | +| `code` | *str* | :heavy_check_mark: | N/A | 400_bad_request | +| `meta` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | {} | \ No newline at end of file diff --git a/docs/models/verificationoautherrorclerkerror.md b/docs/models/verificationoautherrorclerkerror.md index d4aceb6b..2ed5085c 100644 --- a/docs/models/verificationoautherrorclerkerror.md +++ b/docs/models/verificationoautherrorclerkerror.md @@ -3,9 +3,9 @@ ## Fields -| Field | Type | Required | Description | Example | -| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -| `message` | *str* | :heavy_check_mark: | N/A | Invalid input | -| `long_message` | *str* | :heavy_check_mark: | N/A | The input provided does not meet the requirements. | -| `code` | *str* | :heavy_check_mark: | N/A | 400_bad_request | -| `meta` | [Optional[models.ClerkErrorErrorExternalAccountWithVerificationMeta]](../models/clerkerrorerrorexternalaccountwithverificationmeta.md) | :heavy_minus_sign: | N/A | {} | \ No newline at end of file +| Field | Type | Required | Description | Example | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `message` | *str* | :heavy_check_mark: | N/A | Invalid input | +| `long_message` | *str* | :heavy_check_mark: | N/A | The input provided does not meet the requirements. | +| `code` | *str* | :heavy_check_mark: | N/A | 400_bad_request | +| `meta` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | {} | \ No newline at end of file diff --git a/docs/models/verificationoautherrorenterpriseaccountclerkerror.md b/docs/models/verificationoautherrorenterpriseaccountclerkerror.md index a4ed5d6a..cb0fd239 100644 --- a/docs/models/verificationoautherrorenterpriseaccountclerkerror.md +++ b/docs/models/verificationoautherrorenterpriseaccountclerkerror.md @@ -3,9 +3,9 @@ ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | -| `message` | *str* | :heavy_check_mark: | N/A | Invalid input | -| `long_message` | *str* | :heavy_check_mark: | N/A | The input provided does not meet the requirements. | -| `code` | *str* | :heavy_check_mark: | N/A | 400_bad_request | -| `meta` | [Optional[models.ClerkErrorErrorEnterpriseAccountVerificationMeta]](../models/clerkerrorerrorenterpriseaccountverificationmeta.md) | :heavy_minus_sign: | N/A | {} | \ No newline at end of file +| Field | Type | Required | Description | Example | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `message` | *str* | :heavy_check_mark: | N/A | Invalid input | +| `long_message` | *str* | :heavy_check_mark: | N/A | The input provided does not meet the requirements. | +| `code` | *str* | :heavy_check_mark: | N/A | 400_bad_request | +| `meta` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | {} | \ No newline at end of file diff --git a/docs/models/verificationsamlerrorclerkerror.md b/docs/models/verificationsamlerrorclerkerror.md index 26009277..77682e42 100644 --- a/docs/models/verificationsamlerrorclerkerror.md +++ b/docs/models/verificationsamlerrorclerkerror.md @@ -3,9 +3,9 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | -| `message` | *str* | :heavy_check_mark: | N/A | Invalid input | -| `long_message` | *str* | :heavy_check_mark: | N/A | The input provided does not meet the requirements. | -| `code` | *str* | :heavy_check_mark: | N/A | 400_bad_request | -| `meta` | [Optional[models.ClerkErrorErrorMeta]](../models/clerkerrorerrormeta.md) | :heavy_minus_sign: | N/A | {} | \ No newline at end of file +| Field | Type | Required | Description | Example | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `message` | *str* | :heavy_check_mark: | N/A | Invalid input | +| `long_message` | *str* | :heavy_check_mark: | N/A | The input provided does not meet the requirements. | +| `code` | *str* | :heavy_check_mark: | N/A | 400_bad_request | +| `meta` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | {} | \ No newline at end of file diff --git a/docs/models/verificationsamlerrorenterpriseaccountclerkerror.md b/docs/models/verificationsamlerrorenterpriseaccountclerkerror.md index 6ae3d8e1..b89f8240 100644 --- a/docs/models/verificationsamlerrorenterpriseaccountclerkerror.md +++ b/docs/models/verificationsamlerrorenterpriseaccountclerkerror.md @@ -3,9 +3,9 @@ ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | -| `message` | *str* | :heavy_check_mark: | N/A | Invalid input | -| `long_message` | *str* | :heavy_check_mark: | N/A | The input provided does not meet the requirements. | -| `code` | *str* | :heavy_check_mark: | N/A | 400_bad_request | -| `meta` | [Optional[models.ClerkErrorErrorEnterpriseAccountMeta]](../models/clerkerrorerrorenterpriseaccountmeta.md) | :heavy_minus_sign: | N/A | {} | \ No newline at end of file +| Field | Type | Required | Description | Example | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `message` | *str* | :heavy_check_mark: | N/A | Invalid input | +| `long_message` | *str* | :heavy_check_mark: | N/A | The input provided does not meet the requirements. | +| `code` | *str* | :heavy_check_mark: | N/A | 400_bad_request | +| `meta` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | {} | \ No newline at end of file diff --git a/docs/models/verificationsamlerrorsamlaccountclerkerror.md b/docs/models/verificationsamlerrorsamlaccountclerkerror.md index 13b5cb7a..df96b967 100644 --- a/docs/models/verificationsamlerrorsamlaccountclerkerror.md +++ b/docs/models/verificationsamlerrorsamlaccountclerkerror.md @@ -3,9 +3,9 @@ ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | -| `message` | *str* | :heavy_check_mark: | N/A | Invalid input | -| `long_message` | *str* | :heavy_check_mark: | N/A | The input provided does not meet the requirements. | -| `code` | *str* | :heavy_check_mark: | N/A | 400_bad_request | -| `meta` | [Optional[models.ClerkErrorErrorSAMLAccountMeta]](../models/clerkerrorerrorsamlaccountmeta.md) | :heavy_minus_sign: | N/A | {} | \ No newline at end of file +| Field | Type | Required | Description | Example | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `message` | *str* | :heavy_check_mark: | N/A | Invalid input | +| `long_message` | *str* | :heavy_check_mark: | N/A | The input provided does not meet the requirements. | +| `code` | *str* | :heavy_check_mark: | N/A | 400_bad_request | +| `meta` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | {} | \ No newline at end of file diff --git a/docs/sdks/organizationdomainssdk/README.md b/docs/sdks/organizationdomainssdk/README.md index b4ce48cf..58bbd574 100644 --- a/docs/sdks/organizationdomainssdk/README.md +++ b/docs/sdks/organizationdomainssdk/README.md @@ -35,13 +35,13 @@ with Clerk( ### Parameters -| Parameter | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | -| `organization_id` | *str* | :heavy_check_mark: | The ID of the organization where the new domain will be created. | -| `name` | *Optional[str]* | :heavy_minus_sign: | The name of the new domain | -| `enrollment_mode` | *Optional[str]* | :heavy_minus_sign: | The enrollment_mode for the new domain. This can be `automatic_invitation`, `automatic_suggestion` or `manual_invitation` | -| `verified` | *OptionalNullable[bool]* | :heavy_minus_sign: | The status of domain's verification. Defaults to true | -| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | +| `organization_id` | *str* | :heavy_check_mark: | The ID of the organization where the new domain will be created. | +| `name` | *Optional[str]* | :heavy_minus_sign: | The name of the new domain | +| `enrollment_mode` | *Optional[str]* | :heavy_minus_sign: | The enrollment_mode for the new domain. This can be `automatic_invitation`, `automatic_suggestion`, `manual_invitation` or `enterprise_sso` | +| `verified` | *OptionalNullable[bool]* | :heavy_minus_sign: | The status of domain's verification. Defaults to true | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | ### Response @@ -78,14 +78,14 @@ with Clerk( ### Parameters -| Parameter | Type | Required | Description | Example | -| ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | -| `organization_id` | *str* | :heavy_check_mark: | The organization ID. | | -| `verified` | *Optional[str]* | :heavy_minus_sign: | Filter domains by their verification status. `true` or `false` | | -| `enrollment_mode` | *Optional[str]* | :heavy_minus_sign: | Filter domains by their enrollment mode | | -| `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. | | +| Parameter | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `organization_id` | *str* | :heavy_check_mark: | The organization ID. | | +| `verified` | *Optional[str]* | :heavy_minus_sign: | Filter domains by their verification status. `true` or `false` | | +| `enrollment_mode` | *Optional[str]* | :heavy_minus_sign: | Filter domains by their enrollment mode. Accepts `automatic_invitation`, `automatic_suggestion`, `manual_invitation` or `enterprise_sso`.
Prefix a value with `-` to exclude it instead (e.g. `-enterprise_sso`). Include and exclude filters can be combined and compose as AND. | | +| `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 @@ -122,13 +122,13 @@ with Clerk( ### Parameters -| Parameter | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | -| `organization_id` | *str* | :heavy_check_mark: | The ID of the organization to which the domain belongs | -| `domain_id` | *str* | :heavy_check_mark: | The ID of the domain | -| `enrollment_mode` | *OptionalNullable[str]* | :heavy_minus_sign: | The enrollment_mode for the new domain. This can be `automatic_invitation`, `automatic_suggestion` or `manual_invitation` | -| `verified` | *OptionalNullable[bool]* | :heavy_minus_sign: | The status of the domain's verification | -| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | +| `organization_id` | *str* | :heavy_check_mark: | The ID of the organization to which the domain belongs | +| `domain_id` | *str* | :heavy_check_mark: | The ID of the domain | +| `enrollment_mode` | *OptionalNullable[str]* | :heavy_minus_sign: | The enrollment_mode for the new domain. This can be `automatic_invitation`, `automatic_suggestion`, `manual_invitation` or `enterprise_sso` | +| `verified` | *OptionalNullable[bool]* | :heavy_minus_sign: | The status of the domain's verification | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | ### Response @@ -138,7 +138,7 @@ with Clerk( | Error Type | Status Code | Content Type | | ------------------ | ------------------ | ------------------ | -| models.ClerkErrors | 400, 404, 422 | application/json | +| models.ClerkErrors | 400, 403, 404, 422 | application/json | | models.SDKError | 4XX, 5XX | \*/\* | ## delete @@ -179,7 +179,7 @@ with Clerk( | Error Type | Status Code | Content Type | | ------------------ | ------------------ | ------------------ | -| models.ClerkErrors | 400, 401, 404 | application/json | +| models.ClerkErrors | 400, 401, 403, 404 | application/json | | models.SDKError | 4XX, 5XX | \*/\* | ## verify_ownership @@ -269,7 +269,7 @@ with Clerk( | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `organization_id` | *Optional[str]* | :heavy_minus_sign: | The ID of the organization to filter domains by | | | `verified` | [Optional[models.Verified]](../../models/verified.md) | :heavy_minus_sign: | Filter by verification status | | -| `enrollment_mode` | List[[models.QueryParamEnrollmentMode](../../models/queryparamenrollmentmode.md)] | :heavy_minus_sign: | Filter by enrollment mode | | +| `enrollment_mode` | List[[models.QueryParamEnrollmentMode](../../models/queryparamenrollmentmode.md)] | :heavy_minus_sign: | Filter by enrollment mode. Prefix a value with `-` to exclude it instead
(e.g. `-enterprise_sso`). Include and exclude filters can be combined and compose as AND. | | | `query` | *Optional[str]* | :heavy_minus_sign: | Search domains by name or organization ID.
If the query starts with "org_", it will search by exact organization ID match.
Otherwise, it performs a case-insensitive partial match on the domain name.

Note: An empty string or whitespace-only value is not allowed and will result in a validation error.
| | | `domains` | List[*str*] | :heavy_minus_sign: | Filter by exact domain names. Accepts multiple values (e.g. domains=example.com&domains=test.org). | | | `order_by` | *Optional[str]* | :heavy_minus_sign: | Allows to return organization domains in a particular order.
At the moment, you can order the returned domains by their `name` or `created_at`.
In order to specify the direction, you can use the `+/-` symbols prepended to the property to order by.
For example, if you want domains 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.
Defaults to `-created_at`.
| | diff --git a/docs/sdks/users/README.md b/docs/sdks/users/README.md index de4f3711..0f430090 100644 --- a/docs/sdks/users/README.md +++ b/docs/sdks/users/README.md @@ -1550,6 +1550,8 @@ with Clerk( Sets the given user's password as no longer compromised. The user will no longer be prompted to reset their password on their next sign-in. +If the user is in reserved-email password quarantine, the quarantine is preserved and the returned user will still have `requires_password_reset` set to `true`. Reserved-email password quarantine can only be cleared by completing a password reset or changing/removing the password. + ### Example Usage diff --git a/pyproject.toml b/pyproject.toml index 0677a754..a0b879cf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "clerk-backend-api" -version = "6.0.1" +version = "6.0.2" 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 c5e9e88a..d0d91c0b 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 = "6.0.1" +__version__: str = "6.0.2" __openapi_doc_version__: str = "2026-05-12" -__gen_version__: str = "2.904.2" -__user_agent__: str = "speakeasy-sdk/python 6.0.1 2.904.2 2026-05-12 clerk-backend-api" +__gen_version__: str = "2.911.0" +__user_agent__: str = "speakeasy-sdk/python 6.0.2 2.911.0 2026-05-12 clerk-backend-api" try: if __package__ is not None: diff --git a/src/clerk_backend_api/models/__init__.py b/src/clerk_backend_api/models/__init__.py index 4740ead9..ea6a2382 100644 --- a/src/clerk_backend_api/models/__init__.py +++ b/src/clerk_backend_api/models/__init__.py @@ -123,13 +123,8 @@ ChangeProductionInstanceDomainRequestBody, ChangeProductionInstanceDomainRequestBodyTypedDict, ) - from .clerkerror import ClerkError, ClerkErrorTypedDict, Meta, MetaTypedDict - from .clerkerrors import ( - ClerkErrors, - ClerkErrorsData, - ClerkErrorsMeta, - ClerkErrorsMetaTypedDict, - ) + from .clerkerror import ClerkError, ClerkErrorTypedDict + from .clerkerrors import ClerkErrors, ClerkErrorsData from .client import Client, ClientTypedDict, Object from .cnametarget import CNameTarget, CNameTargetTypedDict from .commercecreditbalanceresponse import ( @@ -635,8 +630,6 @@ from .emailaddress import ( Admin, AdminTypedDict, - ClerkErrorErrorMeta, - ClerkErrorErrorMetaTypedDict, EmailAddress, EmailAddressObject, EmailAddressTypedDict, @@ -645,8 +638,6 @@ Error, ErrorClerkError, ErrorClerkErrorTypedDict, - ErrorMeta, - ErrorMetaTypedDict, ErrorTypedDict, FromOAuth, FromOAuthTypedDict, @@ -686,10 +677,6 @@ VerificationTypedDict, ) from .enterpriseaccount import ( - ClerkErrorErrorEnterpriseAccountMeta, - ClerkErrorErrorEnterpriseAccountMetaTypedDict, - ClerkErrorErrorEnterpriseAccountVerificationMeta, - ClerkErrorErrorEnterpriseAccountVerificationMetaTypedDict, EnterpriseAccount, EnterpriseAccountConnection, EnterpriseAccountConnection1, @@ -772,10 +759,6 @@ ExtendFreeTrialRequestTypedDict, ) from .externalaccountwithverification import ( - ClerkErrorErrorExternalAccountWithVerificationMeta, - ClerkErrorErrorExternalAccountWithVerificationMetaTypedDict, - ClerkErrorErrorExternalAccountWithVerificationVerificationMeta, - ClerkErrorErrorExternalAccountWithVerificationVerificationMetaTypedDict, ExternalAccountWithVerification, ExternalAccountWithVerificationObject, ExternalAccountWithVerificationTypedDict, @@ -1491,8 +1474,6 @@ RotateOAuthApplicationSecretRequestTypedDict, ) from .samlaccount import ( - ClerkErrorErrorSAMLAccountMeta, - ClerkErrorErrorSAMLAccountMetaTypedDict, SAMLAccount, SAMLAccountConnection, SAMLAccountConnection1, @@ -2118,23 +2099,9 @@ "ClaimsTypedDict", "ClerkBaseError", "ClerkError", - "ClerkErrorErrorEnterpriseAccountMeta", - "ClerkErrorErrorEnterpriseAccountMetaTypedDict", - "ClerkErrorErrorEnterpriseAccountVerificationMeta", - "ClerkErrorErrorEnterpriseAccountVerificationMetaTypedDict", - "ClerkErrorErrorExternalAccountWithVerificationMeta", - "ClerkErrorErrorExternalAccountWithVerificationMetaTypedDict", - "ClerkErrorErrorExternalAccountWithVerificationVerificationMeta", - "ClerkErrorErrorExternalAccountWithVerificationVerificationMetaTypedDict", - "ClerkErrorErrorMeta", - "ClerkErrorErrorMetaTypedDict", - "ClerkErrorErrorSAMLAccountMeta", - "ClerkErrorErrorSAMLAccountMetaTypedDict", "ClerkErrorTypedDict", "ClerkErrors", "ClerkErrorsData", - "ClerkErrorsMeta", - "ClerkErrorsMetaTypedDict", "Client", "ClientTypedDict", "CodeType", @@ -2500,8 +2467,6 @@ "Error", "ErrorClerkError", "ErrorClerkErrorTypedDict", - "ErrorMeta", - "ErrorMetaTypedDict", "ErrorTypedDict", "Errors", "ErrorsTypedDict", @@ -2781,8 +2746,6 @@ "MergeOrganizationMetadataRequestBody", "MergeOrganizationMetadataRequestBodyTypedDict", "MergeOrganizationMetadataRequestTypedDict", - "Meta", - "MetaTypedDict", "NextAction", "NextInvoice", "NextInvoiceTypedDict", @@ -3659,12 +3622,8 @@ "ChangeProductionInstanceDomainRequestBodyTypedDict": ".changeproductioninstancedomainop", "ClerkError": ".clerkerror", "ClerkErrorTypedDict": ".clerkerror", - "Meta": ".clerkerror", - "MetaTypedDict": ".clerkerror", "ClerkErrors": ".clerkerrors", "ClerkErrorsData": ".clerkerrors", - "ClerkErrorsMeta": ".clerkerrors", - "ClerkErrorsMetaTypedDict": ".clerkerrors", "Client": ".client", "ClientTypedDict": ".client", "Object": ".client", @@ -4031,8 +3990,6 @@ "DomainsTypedDict": ".domains", "Admin": ".emailaddress", "AdminTypedDict": ".emailaddress", - "ClerkErrorErrorMeta": ".emailaddress", - "ClerkErrorErrorMetaTypedDict": ".emailaddress", "EmailAddress": ".emailaddress", "EmailAddressObject": ".emailaddress", "EmailAddressTypedDict": ".emailaddress", @@ -4041,8 +3998,6 @@ "Error": ".emailaddress", "ErrorClerkError": ".emailaddress", "ErrorClerkErrorTypedDict": ".emailaddress", - "ErrorMeta": ".emailaddress", - "ErrorMetaTypedDict": ".emailaddress", "ErrorTypedDict": ".emailaddress", "FromOAuth": ".emailaddress", "FromOAuthTypedDict": ".emailaddress", @@ -4080,10 +4035,6 @@ "VerificationTicketVerificationStatus": ".emailaddress", "VerificationTicketVerificationStrategy": ".emailaddress", "VerificationTypedDict": ".emailaddress", - "ClerkErrorErrorEnterpriseAccountMeta": ".enterpriseaccount", - "ClerkErrorErrorEnterpriseAccountMetaTypedDict": ".enterpriseaccount", - "ClerkErrorErrorEnterpriseAccountVerificationMeta": ".enterpriseaccount", - "ClerkErrorErrorEnterpriseAccountVerificationMetaTypedDict": ".enterpriseaccount", "EnterpriseAccount": ".enterpriseaccount", "EnterpriseAccountConnection": ".enterpriseaccount", "EnterpriseAccountConnection1": ".enterpriseaccount", @@ -4150,10 +4101,6 @@ "ExtendBillingSubscriptionItemFreeTrialRequestTypedDict": ".extendbillingsubscriptionitemfreetrialop", "ExtendFreeTrialRequest": ".extendfreetrialrequest", "ExtendFreeTrialRequestTypedDict": ".extendfreetrialrequest", - "ClerkErrorErrorExternalAccountWithVerificationMeta": ".externalaccountwithverification", - "ClerkErrorErrorExternalAccountWithVerificationMetaTypedDict": ".externalaccountwithverification", - "ClerkErrorErrorExternalAccountWithVerificationVerificationMeta": ".externalaccountwithverification", - "ClerkErrorErrorExternalAccountWithVerificationVerificationMetaTypedDict": ".externalaccountwithverification", "ExternalAccountWithVerification": ".externalaccountwithverification", "ExternalAccountWithVerificationObject": ".externalaccountwithverification", "ExternalAccountWithVerificationTypedDict": ".externalaccountwithverification", @@ -4692,8 +4639,6 @@ "RotateMachineSecretKeyRequestTypedDict": ".rotatemachinesecretkeyop", "RotateOAuthApplicationSecretRequest": ".rotateoauthapplicationsecretop", "RotateOAuthApplicationSecretRequestTypedDict": ".rotateoauthapplicationsecretop", - "ClerkErrorErrorSAMLAccountMeta": ".samlaccount", - "ClerkErrorErrorSAMLAccountMetaTypedDict": ".samlaccount", "SAMLAccount": ".samlaccount", "SAMLAccountConnection": ".samlaccount", "SAMLAccountConnection1": ".samlaccount", diff --git a/src/clerk_backend_api/models/clerkerror.py b/src/clerk_backend_api/models/clerkerror.py index dd3c123e..0a7859f3 100644 --- a/src/clerk_backend_api/models/clerkerror.py +++ b/src/clerk_backend_api/models/clerkerror.py @@ -3,23 +3,15 @@ from __future__ import annotations from clerk_backend_api.types import BaseModel, UNSET_SENTINEL from pydantic import model_serializer -from typing import Optional +from typing import Any, Dict, Optional from typing_extensions import NotRequired, TypedDict -class MetaTypedDict(TypedDict): - pass - - -class Meta(BaseModel): - pass - - class ClerkErrorTypedDict(TypedDict): message: str long_message: str code: str - meta: NotRequired[MetaTypedDict] + meta: NotRequired[Dict[str, Any]] class ClerkError(BaseModel): @@ -29,7 +21,7 @@ class ClerkError(BaseModel): code: str - meta: Optional[Meta] = None + meta: Optional[Dict[str, Any]] = None @model_serializer(mode="wrap") def serialize_model(self, handler): diff --git a/src/clerk_backend_api/models/clerkerrors.py b/src/clerk_backend_api/models/clerkerrors.py index 7658c12b..10d2accf 100644 --- a/src/clerk_backend_api/models/clerkerrors.py +++ b/src/clerk_backend_api/models/clerkerrors.py @@ -6,21 +6,12 @@ from clerk_backend_api.types import BaseModel from dataclasses import dataclass, field import httpx -from typing import List, Optional -from typing_extensions import TypedDict - - -class ClerkErrorsMetaTypedDict(TypedDict): - pass - - -class ClerkErrorsMeta(BaseModel): - pass +from typing import Any, Dict, List, Optional class ClerkErrorsData(BaseModel): errors: List[ClerkError] - meta: Optional[ClerkErrorsMeta] = None + meta: Optional[Dict[str, Any]] = None @dataclass(unsafe_hash=True) diff --git a/src/clerk_backend_api/models/createorganizationdomainop.py b/src/clerk_backend_api/models/createorganizationdomainop.py index 57241543..dc20a32d 100644 --- a/src/clerk_backend_api/models/createorganizationdomainop.py +++ b/src/clerk_backend_api/models/createorganizationdomainop.py @@ -18,7 +18,7 @@ class CreateOrganizationDomainRequestBodyTypedDict(TypedDict): name: NotRequired[str] r"""The name of the new domain""" enrollment_mode: NotRequired[str] - r"""The enrollment_mode for the new domain. This can be `automatic_invitation`, `automatic_suggestion` or `manual_invitation`""" + r"""The enrollment_mode for the new domain. This can be `automatic_invitation`, `automatic_suggestion`, `manual_invitation` or `enterprise_sso`""" verified: NotRequired[Nullable[bool]] r"""The status of domain's verification. Defaults to true""" @@ -28,7 +28,7 @@ class CreateOrganizationDomainRequestBody(BaseModel): r"""The name of the new domain""" enrollment_mode: Optional[str] = None - r"""The enrollment_mode for the new domain. This can be `automatic_invitation`, `automatic_suggestion` or `manual_invitation`""" + r"""The enrollment_mode for the new domain. This can be `automatic_invitation`, `automatic_suggestion`, `manual_invitation` or `enterprise_sso`""" verified: OptionalNullable[bool] = UNSET r"""The status of domain's verification. Defaults to true""" diff --git a/src/clerk_backend_api/models/emailaddress.py b/src/clerk_backend_api/models/emailaddress.py index 7aba58d2..a407db7d 100644 --- a/src/clerk_backend_api/models/emailaddress.py +++ b/src/clerk_backend_api/models/emailaddress.py @@ -13,7 +13,7 @@ from clerk_backend_api.utils import get_discriminator from enum import Enum from pydantic import Discriminator, Tag, field_serializer, model_serializer -from typing import List, Optional, Union +from typing import Any, Dict, List, Optional, Union from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict @@ -159,19 +159,11 @@ class VerificationSamlVerificationStrategy(str, Enum): SAML = "saml" -class ClerkErrorErrorMetaTypedDict(TypedDict): - pass - - -class ClerkErrorErrorMeta(BaseModel): - pass - - class VerificationSamlErrorClerkErrorTypedDict(TypedDict): message: str long_message: str code: str - meta: NotRequired[ClerkErrorErrorMetaTypedDict] + meta: NotRequired[Dict[str, Any]] class VerificationSamlErrorClerkError(BaseModel): @@ -181,57 +173,7 @@ class VerificationSamlErrorClerkError(BaseModel): code: str - meta: Optional[ClerkErrorErrorMeta] = None - - @model_serializer(mode="wrap") - def serialize_model(self, handler): - optional_fields = set(["meta"]) - 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 VerificationFromOauthVerificationObject(str, Enum): - VERIFICATION_FROM_OAUTH = "verification_from_oauth" - - -class VerificationFromOauthVerificationStatus(str, Enum): - UNVERIFIED = "unverified" - VERIFIED = "verified" - - -class ErrorMetaTypedDict(TypedDict): - pass - - -class ErrorMeta(BaseModel): - pass - - -class ErrorClerkErrorTypedDict(TypedDict): - message: str - long_message: str - code: str - meta: NotRequired[ErrorMetaTypedDict] - - -class ErrorClerkError(BaseModel): - message: str - - long_message: str - - code: str - - meta: Optional[ErrorMeta] = None + meta: Optional[Dict[str, Any]] = None @model_serializer(mode="wrap") def serialize_model(self, handler): @@ -397,6 +339,48 @@ def serialize_model(self, handler): return m +class VerificationFromOauthVerificationObject(str, Enum): + VERIFICATION_FROM_OAUTH = "verification_from_oauth" + + +class VerificationFromOauthVerificationStatus(str, Enum): + UNVERIFIED = "unverified" + VERIFIED = "verified" + + +class ErrorClerkErrorTypedDict(TypedDict): + message: str + long_message: str + code: str + meta: NotRequired[Dict[str, Any]] + + +class ErrorClerkError(BaseModel): + message: str + + long_message: str + + code: str + + meta: Optional[Dict[str, Any]] = None + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["meta"]) + 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 + + ErrorTypedDict = ErrorClerkErrorTypedDict diff --git a/src/clerk_backend_api/models/enterpriseaccount.py b/src/clerk_backend_api/models/enterpriseaccount.py index 5e042648..00702cd8 100644 --- a/src/clerk_backend_api/models/enterpriseaccount.py +++ b/src/clerk_backend_api/models/enterpriseaccount.py @@ -44,19 +44,11 @@ class VerificationOauthVerificationEnterpriseAccountStatus( TRANSFERABLE = "transferable" -class ClerkErrorErrorEnterpriseAccountVerificationMetaTypedDict(TypedDict): - pass - - -class ClerkErrorErrorEnterpriseAccountVerificationMeta(BaseModel): - pass - - class VerificationOauthErrorEnterpriseAccountClerkErrorTypedDict(TypedDict): message: str long_message: str code: str - meta: NotRequired[ClerkErrorErrorEnterpriseAccountVerificationMetaTypedDict] + meta: NotRequired[Dict[str, Any]] class VerificationOauthErrorEnterpriseAccountClerkError(BaseModel): @@ -66,7 +58,7 @@ class VerificationOauthErrorEnterpriseAccountClerkError(BaseModel): code: str - meta: Optional[ClerkErrorErrorEnterpriseAccountVerificationMeta] = None + meta: Optional[Dict[str, Any]] = None @model_serializer(mode="wrap") def serialize_model(self, handler): @@ -185,19 +177,11 @@ class VerificationSamlVerificationEnterpriseAccountStrategy(str, Enum): SAML = "saml" -class ClerkErrorErrorEnterpriseAccountMetaTypedDict(TypedDict): - pass - - -class ClerkErrorErrorEnterpriseAccountMeta(BaseModel): - pass - - class VerificationSamlErrorEnterpriseAccountClerkErrorTypedDict(TypedDict): message: str long_message: str code: str - meta: NotRequired[ClerkErrorErrorEnterpriseAccountMetaTypedDict] + meta: NotRequired[Dict[str, Any]] class VerificationSamlErrorEnterpriseAccountClerkError(BaseModel): @@ -207,7 +191,7 @@ class VerificationSamlErrorEnterpriseAccountClerkError(BaseModel): code: str - meta: Optional[ClerkErrorErrorEnterpriseAccountMeta] = None + meta: Optional[Dict[str, Any]] = None @model_serializer(mode="wrap") def serialize_model(self, handler): diff --git a/src/clerk_backend_api/models/externalaccountwithverification.py b/src/clerk_backend_api/models/externalaccountwithverification.py index 59d85ad7..87be398e 100644 --- a/src/clerk_backend_api/models/externalaccountwithverification.py +++ b/src/clerk_backend_api/models/externalaccountwithverification.py @@ -38,23 +38,11 @@ class VerificationGoogleOneTapVerificationStrategy(str, Enum): GOOGLE_ONE_TAP = "google_one_tap" -class ClerkErrorErrorExternalAccountWithVerificationVerificationMetaTypedDict( - TypedDict -): - pass - - -class ClerkErrorErrorExternalAccountWithVerificationVerificationMeta(BaseModel): - pass - - class VerificationGoogleOneTapErrorClerkErrorTypedDict(TypedDict): message: str long_message: str code: str - meta: NotRequired[ - ClerkErrorErrorExternalAccountWithVerificationVerificationMetaTypedDict - ] + meta: NotRequired[Dict[str, Any]] class VerificationGoogleOneTapErrorClerkError(BaseModel): @@ -64,9 +52,7 @@ class VerificationGoogleOneTapErrorClerkError(BaseModel): code: str - meta: Optional[ClerkErrorErrorExternalAccountWithVerificationVerificationMeta] = ( - None - ) + meta: Optional[Dict[str, Any]] = None @model_serializer(mode="wrap") def serialize_model(self, handler): @@ -156,19 +142,11 @@ class VerificationOauthVerificationStatus(str, Enum, metaclass=utils.OpenEnumMet TRANSFERABLE = "transferable" -class ClerkErrorErrorExternalAccountWithVerificationMetaTypedDict(TypedDict): - pass - - -class ClerkErrorErrorExternalAccountWithVerificationMeta(BaseModel): - pass - - class VerificationOauthErrorClerkErrorTypedDict(TypedDict): message: str long_message: str code: str - meta: NotRequired[ClerkErrorErrorExternalAccountWithVerificationMetaTypedDict] + meta: NotRequired[Dict[str, Any]] class VerificationOauthErrorClerkError(BaseModel): @@ -178,7 +156,7 @@ class VerificationOauthErrorClerkError(BaseModel): code: str - meta: Optional[ClerkErrorErrorExternalAccountWithVerificationMeta] = None + meta: Optional[Dict[str, Any]] = None @model_serializer(mode="wrap") def serialize_model(self, handler): diff --git a/src/clerk_backend_api/models/listallorganizationdomainsop.py b/src/clerk_backend_api/models/listallorganizationdomainsop.py index 8b28daa9..4defa044 100644 --- a/src/clerk_backend_api/models/listallorganizationdomainsop.py +++ b/src/clerk_backend_api/models/listallorganizationdomainsop.py @@ -20,6 +20,11 @@ class QueryParamEnrollmentMode(str, Enum): MANUAL_INVITATION = "manual_invitation" AUTOMATIC_INVITATION = "automatic_invitation" AUTOMATIC_SUGGESTION = "automatic_suggestion" + ENTERPRISE_SSO = "enterprise_sso" + MINUS_MANUAL_INVITATION = "-manual_invitation" + MINUS_AUTOMATIC_INVITATION = "-automatic_invitation" + MINUS_AUTOMATIC_SUGGESTION = "-automatic_suggestion" + MINUS_ENTERPRISE_SSO = "-enterprise_sso" class ListAllOrganizationDomainsRequestTypedDict(TypedDict): @@ -28,7 +33,9 @@ class ListAllOrganizationDomainsRequestTypedDict(TypedDict): verified: NotRequired[Verified] r"""Filter by verification status""" enrollment_mode: NotRequired[List[QueryParamEnrollmentMode]] - r"""Filter by enrollment mode""" + r"""Filter by enrollment mode. Prefix a value with `-` to exclude it instead + (e.g. `-enterprise_sso`). Include and exclude filters can be combined and compose as AND. + """ query: NotRequired[str] r"""Search domains by name or organization ID. If the query starts with \"org_\", it will search by exact organization ID match. @@ -76,7 +83,9 @@ class ListAllOrganizationDomainsRequest(BaseModel): Optional[List[QueryParamEnrollmentMode]], FieldMetadata(query=QueryParamMetadata(style="form", explode=False)), ] = None - r"""Filter by enrollment mode""" + r"""Filter by enrollment mode. Prefix a value with `-` to exclude it instead + (e.g. `-enterprise_sso`). Include and exclude filters can be combined and compose as AND. + """ query: Annotated[ Optional[str], diff --git a/src/clerk_backend_api/models/listorganizationdomainsop.py b/src/clerk_backend_api/models/listorganizationdomainsop.py index 620c8bf3..6c47e453 100644 --- a/src/clerk_backend_api/models/listorganizationdomainsop.py +++ b/src/clerk_backend_api/models/listorganizationdomainsop.py @@ -14,7 +14,9 @@ class ListOrganizationDomainsRequestTypedDict(TypedDict): verified: NotRequired[str] r"""Filter domains by their verification status. `true` or `false`""" enrollment_mode: NotRequired[str] - r"""Filter domains by their enrollment mode""" + r"""Filter domains by their enrollment mode. Accepts `automatic_invitation`, `automatic_suggestion`, `manual_invitation` or `enterprise_sso`. + Prefix a value with `-` to exclude it instead (e.g. `-enterprise_sso`). Include and exclude filters can be combined and compose as AND. + """ limit: NotRequired[int] r"""Applies a limit to the number of results returned. Can be used for paginating the results together with `offset`. @@ -42,7 +44,9 @@ class ListOrganizationDomainsRequest(BaseModel): Optional[str], FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), ] = None - r"""Filter domains by their enrollment mode""" + r"""Filter domains by their enrollment mode. Accepts `automatic_invitation`, `automatic_suggestion`, `manual_invitation` or `enterprise_sso`. + Prefix a value with `-` to exclude it instead (e.g. `-enterprise_sso`). Include and exclude filters can be combined and compose as AND. + """ limit: Annotated[ Optional[int], diff --git a/src/clerk_backend_api/models/organizationdomain.py b/src/clerk_backend_api/models/organizationdomain.py index c15741b2..4cff8405 100644 --- a/src/clerk_backend_api/models/organizationdomain.py +++ b/src/clerk_backend_api/models/organizationdomain.py @@ -27,6 +27,7 @@ class EnrollmentMode(str, Enum): MANUAL_INVITATION = "manual_invitation" AUTOMATIC_INVITATION = "automatic_invitation" AUTOMATIC_SUGGESTION = "automatic_suggestion" + ENTERPRISE_SSO = "enterprise_sso" class AffiliationVerificationTypedDict(TypedDict): diff --git a/src/clerk_backend_api/models/samlaccount.py b/src/clerk_backend_api/models/samlaccount.py index 0be7a6fe..0e3b6c5c 100644 --- a/src/clerk_backend_api/models/samlaccount.py +++ b/src/clerk_backend_api/models/samlaccount.py @@ -112,19 +112,11 @@ class VerificationSAMLVerificationSAMLAccountStrategy(str, Enum): SAML = "saml" -class ClerkErrorErrorSAMLAccountMetaTypedDict(TypedDict): - pass - - -class ClerkErrorErrorSAMLAccountMeta(BaseModel): - pass - - class VerificationSAMLErrorSAMLAccountClerkErrorTypedDict(TypedDict): message: str long_message: str code: str - meta: NotRequired[ClerkErrorErrorSAMLAccountMetaTypedDict] + meta: NotRequired[Dict[str, Any]] class VerificationSAMLErrorSAMLAccountClerkError(BaseModel): @@ -134,7 +126,7 @@ class VerificationSAMLErrorSAMLAccountClerkError(BaseModel): code: str - meta: Optional[ClerkErrorErrorSAMLAccountMeta] = None + meta: Optional[Dict[str, Any]] = None @model_serializer(mode="wrap") def serialize_model(self, handler): diff --git a/src/clerk_backend_api/models/updateorganizationdomainop.py b/src/clerk_backend_api/models/updateorganizationdomainop.py index 44b6a62a..ad024fca 100644 --- a/src/clerk_backend_api/models/updateorganizationdomainop.py +++ b/src/clerk_backend_api/models/updateorganizationdomainop.py @@ -15,14 +15,14 @@ class UpdateOrganizationDomainRequestBodyTypedDict(TypedDict): enrollment_mode: NotRequired[Nullable[str]] - r"""The enrollment_mode for the new domain. This can be `automatic_invitation`, `automatic_suggestion` or `manual_invitation`""" + r"""The enrollment_mode for the new domain. This can be `automatic_invitation`, `automatic_suggestion`, `manual_invitation` or `enterprise_sso`""" verified: NotRequired[Nullable[bool]] r"""The status of the domain's verification""" class UpdateOrganizationDomainRequestBody(BaseModel): enrollment_mode: OptionalNullable[str] = UNSET - r"""The enrollment_mode for the new domain. This can be `automatic_invitation`, `automatic_suggestion` or `manual_invitation`""" + r"""The enrollment_mode for the new domain. This can be `automatic_invitation`, `automatic_suggestion`, `manual_invitation` or `enterprise_sso`""" verified: OptionalNullable[bool] = UNSET r"""The status of the domain's verification""" diff --git a/src/clerk_backend_api/organizationdomains_sdk.py b/src/clerk_backend_api/organizationdomains_sdk.py index 44cb4e81..b420fe56 100644 --- a/src/clerk_backend_api/organizationdomains_sdk.py +++ b/src/clerk_backend_api/organizationdomains_sdk.py @@ -27,7 +27,7 @@ def create( :param organization_id: The ID of the organization where the new domain will be created. :param name: The name of the new domain - :param enrollment_mode: The enrollment_mode for the new domain. This can be `automatic_invitation`, `automatic_suggestion` or `manual_invitation` + :param enrollment_mode: The enrollment_mode for the new domain. This can be `automatic_invitation`, `automatic_suggestion`, `manual_invitation` or `enterprise_sso` :param verified: The status of domain's verification. Defaults to true :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method @@ -137,7 +137,7 @@ async def create_async( :param organization_id: The ID of the organization where the new domain will be created. :param name: The name of the new domain - :param enrollment_mode: The enrollment_mode for the new domain. This can be `automatic_invitation`, `automatic_suggestion` or `manual_invitation` + :param enrollment_mode: The enrollment_mode for the new domain. This can be `automatic_invitation`, `automatic_suggestion`, `manual_invitation` or `enterprise_sso` :param verified: The status of domain's verification. Defaults to true :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method @@ -248,7 +248,8 @@ def list( :param organization_id: The organization ID. :param verified: Filter domains by their verification status. `true` or `false` - :param enrollment_mode: Filter domains by their enrollment mode + :param enrollment_mode: Filter domains by their enrollment mode. Accepts `automatic_invitation`, `automatic_suggestion`, `manual_invitation` or `enterprise_sso`. + Prefix a value with `-` to exclude it instead (e.g. `-enterprise_sso`). Include and exclude filters can be combined and compose as AND. :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. @@ -353,7 +354,8 @@ async def list_async( :param organization_id: The organization ID. :param verified: Filter domains by their verification status. `true` or `false` - :param enrollment_mode: Filter domains by their enrollment mode + :param enrollment_mode: Filter domains by their enrollment mode. Accepts `automatic_invitation`, `automatic_suggestion`, `manual_invitation` or `enterprise_sso`. + Prefix a value with `-` to exclude it instead (e.g. `-enterprise_sso`). Include and exclude filters can be combined and compose as AND. :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. @@ -457,7 +459,7 @@ def update( :param organization_id: The ID of the organization to which the domain belongs :param domain_id: The ID of the domain - :param enrollment_mode: The enrollment_mode for the new domain. This can be `automatic_invitation`, `automatic_suggestion` or `manual_invitation` + :param enrollment_mode: The enrollment_mode for the new domain. This can be `automatic_invitation`, `automatic_suggestion`, `manual_invitation` or `enterprise_sso` :param verified: The status of the domain's verification :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method @@ -535,7 +537,9 @@ def update( response_data: Any = None if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response(models.OrganizationDomain, http_res) - if utils.match_response(http_res, ["400", "404", "422"], "application/json"): + if utils.match_response( + http_res, ["400", "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", "*"): @@ -565,7 +569,7 @@ async def update_async( :param organization_id: The ID of the organization to which the domain belongs :param domain_id: The ID of the domain - :param enrollment_mode: The enrollment_mode for the new domain. This can be `automatic_invitation`, `automatic_suggestion` or `manual_invitation` + :param enrollment_mode: The enrollment_mode for the new domain. This can be `automatic_invitation`, `automatic_suggestion`, `manual_invitation` or `enterprise_sso` :param verified: The status of the domain's verification :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method @@ -643,7 +647,9 @@ async def update_async( response_data: Any = None if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response(models.OrganizationDomain, http_res) - if utils.match_response(http_res, ["400", "404", "422"], "application/json"): + if utils.match_response( + http_res, ["400", "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", "*"): @@ -736,7 +742,9 @@ def delete( 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, ["400", "401", "404"], "application/json"): + 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", "*"): @@ -829,7 +837,9 @@ async def delete_async( 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, ["400", "401", "404"], "application/json"): + 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", "*"): @@ -1069,7 +1079,8 @@ def list_all( :param organization_id: The ID of the organization to filter domains by :param verified: Filter by verification status - :param enrollment_mode: Filter by enrollment mode + :param enrollment_mode: Filter by enrollment mode. Prefix a value with `-` to exclude it instead + (e.g. `-enterprise_sso`). Include and exclude filters can be combined and compose as AND. :param query: Search domains by name or organization ID. If the query starts with \"org_\", it will search by exact organization ID match. Otherwise, it performs a case-insensitive partial match on the domain name. @@ -1202,7 +1213,8 @@ async def list_all_async( :param organization_id: The ID of the organization to filter domains by :param verified: Filter by verification status - :param enrollment_mode: Filter by enrollment mode + :param enrollment_mode: Filter by enrollment mode. Prefix a value with `-` to exclude it instead + (e.g. `-enterprise_sso`). Include and exclude filters can be combined and compose as AND. :param query: Search domains by name or organization ID. If the query starts with \"org_\", it will search by exact organization ID match. Otherwise, it performs a case-insensitive partial match on the domain name. diff --git a/src/clerk_backend_api/users.py b/src/clerk_backend_api/users.py index ba0c4229..41603abc 100644 --- a/src/clerk_backend_api/users.py +++ b/src/clerk_backend_api/users.py @@ -6652,6 +6652,8 @@ def unset_password_compromised( Sets the given user's password as no longer compromised. The user will no longer be prompted to reset their password on their next sign-in. + If the user is in reserved-email password quarantine, the quarantine is preserved and the returned user will still have `requires_password_reset` set to `true`. Reserved-email password quarantine can only be cleared by completing a password reset or changing/removing the password. + :param user_id: The ID of the user to unset the compromised status for :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method @@ -6744,6 +6746,8 @@ async def unset_password_compromised_async( Sets the given user's password as no longer compromised. The user will no longer be prompted to reset their password on their next sign-in. + If the user is in reserved-email password quarantine, the quarantine is preserved and the returned user will still have `requires_password_reset` set to `true`. Reserved-email password quarantine can only be cleared by completing a password reset or changing/removing the password. + :param user_id: The ID of the user to unset the compromised status for :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/utils/retries.py b/src/clerk_backend_api/utils/retries.py index af07d4e9..ca7b59ef 100644 --- a/src/clerk_backend_api/utils/retries.py +++ b/src/clerk_backend_api/utils/retries.py @@ -11,10 +11,13 @@ class BackoffStrategy: + """Exponential backoff strategy configuration.""" + initial_interval: int max_interval: int exponent: float max_elapsed_time: int + jitter_ms: Optional[int] def __init__( self, @@ -22,24 +25,63 @@ def __init__( max_interval: int, exponent: float, max_elapsed_time: int, + jitter_ms: Optional[int] = None, ): + """Initialize a backoff strategy. + + Args: + initial_interval: Initial retry interval in milliseconds. + max_interval: Maximum retry interval in milliseconds. + exponent: Base of the exponential backoff; the interval grows as + ``initial_interval * exponent ** retries``. + max_elapsed_time: Maximum total elapsed time in milliseconds. + jitter_ms: Additive jitter bound in milliseconds. When set, adds a random + value in ``[0, jitter_ms]`` to each computed backoff interval (default + ``+[0, 1s]``). + + Note: + When a response carries a ``Retry-After`` or ``retry-after-ms`` header, + that delay is used as-is and the sleep-shaping parameters + (``initial_interval``, ``max_interval``, ``exponent``, ``jitter_ms``) are + ignored for that attempt. + """ + if jitter_ms is not None and jitter_ms < 0: + raise ValueError("jitter_ms must be >= 0") self.initial_interval = initial_interval self.max_interval = max_interval self.exponent = exponent self.max_elapsed_time = max_elapsed_time + self.jitter_ms = jitter_ms class RetryConfig: + """Runtime retry configuration.""" + strategy: str backoff: BackoffStrategy retry_connection_errors: bool + status_codes_override: Optional[List[str]] def __init__( - self, strategy: str, backoff: BackoffStrategy, retry_connection_errors: bool + self, + strategy: str, + backoff: BackoffStrategy, + retry_connection_errors: bool, + status_codes_override: Optional[List[str]] = None, ): + """Initialize a retry configuration. + + Args: + strategy: Retry strategy: ``"none"`` or ``"backoff"``. + backoff: Backoff parameters. + retry_connection_errors: Whether to also retry transport-level connection errors. + status_codes_override: Retryable HTTP status codes that take precedence over the + per-operation defaults when non-empty. + """ self.strategy = strategy self.backoff = backoff self.retry_connection_errors = retry_connection_errors + self.status_codes_override = status_codes_override class Retries: @@ -48,7 +90,7 @@ class Retries: def __init__(self, config: RetryConfig, status_codes: List[str]): self.config = config - self.status_codes = status_codes + self.status_codes = config.status_codes_override or status_codes class TemporaryError(Exception): @@ -93,12 +135,28 @@ def _parse_retry_after_header(response: httpx.Response) -> Optional[int]: return None +def _parse_retry_after_ms_header(response: httpx.Response) -> Optional[int]: + retry_after_ms_header = response.headers.get("retry-after-ms") + if not retry_after_ms_header: + return None + + try: + milliseconds = float(retry_after_ms_header) + if milliseconds >= 0: + return round(milliseconds) + except (OverflowError, ValueError): + pass + + return None + + def _get_sleep_interval( exception: Exception, initial_interval: int, max_interval: int, exponent: float, retries: int, + jitter_ms: Optional[int] = None, ) -> float: """Get sleep interval for retry with exponential backoff. @@ -108,6 +166,7 @@ def _get_sleep_interval( max_interval: Maximum retry interval in milliseconds. exponent: Base for exponential backoff calculation. retries: Current retry attempt count. + jitter_ms: Additive jitter bound in ms; see ``BackoffStrategy.jitter_ms``. Returns: Sleep interval in seconds. @@ -119,7 +178,11 @@ def _get_sleep_interval( ): return exception.retry_after / 1000 - sleep = (initial_interval / 1000) * exponent**retries + random.uniform(0, 1) + sleep = (initial_interval / 1000) * exponent**retries + if jitter_ms is not None: + sleep += random.uniform(0, jitter_ms / 1000) + else: + sleep += random.uniform(0, 1) return min(sleep, max_interval / 1000) @@ -162,6 +225,7 @@ def do_request() -> httpx.Response: retries.config.backoff.max_interval, retries.config.backoff.exponent, retries.config.backoff.max_elapsed_time, + retries.config.backoff.jitter_ms, ) return func() @@ -206,6 +270,7 @@ async def do_request() -> httpx.Response: retries.config.backoff.max_interval, retries.config.backoff.exponent, retries.config.backoff.max_elapsed_time, + retries.config.backoff.jitter_ms, ) return await func() @@ -217,6 +282,7 @@ def retry_with_backoff( max_interval=60000, exponent=1.5, max_elapsed_time=3600000, + jitter_ms=None, ): start = round(time.time() * 1000) retries = 0 @@ -234,8 +300,17 @@ def retry_with_backoff( raise + if isinstance(exception, TemporaryError): + retry_after_ms = _parse_retry_after_ms_header(exception.response) + if retry_after_ms is not None: + exception.retry_after = retry_after_ms sleep = _get_sleep_interval( - exception, initial_interval, max_interval, exponent, retries + exception, + initial_interval, + max_interval, + exponent, + retries, + jitter_ms=jitter_ms, ) time.sleep(sleep) retries += 1 @@ -247,6 +322,7 @@ async def retry_with_backoff_async( max_interval=60000, exponent=1.5, max_elapsed_time=3600000, + jitter_ms=None, ): start = round(time.time() * 1000) retries = 0 @@ -264,8 +340,17 @@ async def retry_with_backoff_async( raise + if isinstance(exception, TemporaryError): + retry_after_ms = _parse_retry_after_ms_header(exception.response) + if retry_after_ms is not None: + exception.retry_after = retry_after_ms sleep = _get_sleep_interval( - exception, initial_interval, max_interval, exponent, retries + exception, + initial_interval, + max_interval, + exponent, + retries, + jitter_ms=jitter_ms, ) await asyncio.sleep(sleep) retries += 1