diff --git a/.last-synced-sha b/.last-synced-sha
new file mode 100644
index 00000000..f72eb0e2
--- /dev/null
+++ b/.last-synced-sha
@@ -0,0 +1 @@
+92db0495807c86fbbc4d45bd266a6c1f5bcbb59c
diff --git a/.oagen-manifest.json b/.oagen-manifest.json
index 6b7a0276..ae04273b 100644
--- a/.oagen-manifest.json
+++ b/.oagen-manifest.json
@@ -1,7 +1,7 @@
{
- "version": 1,
+ "version": 2,
"language": "dotnet",
- "generatedAt": "2026-04-21T03:25:05.813Z",
+ "generatedAt": "2026-04-27T21:26:55.702Z",
"files": [
"src/WorkOS.net/Client/WorkOSClient.Generated.cs",
"src/WorkOS.net/Entities/ActionAuthenticationDenied.cs",
@@ -111,6 +111,8 @@
"src/WorkOS.net/Entities/CreateAuthorizationPermission.cs",
"src/WorkOS.net/Entities/CreateAuthorizationResource.cs",
"src/WorkOS.net/Entities/CreateCorsOrigin.cs",
+ "src/WorkOS.net/Entities/CreateGroup.cs",
+ "src/WorkOS.net/Entities/CreateGroupMembership.cs",
"src/WorkOS.net/Entities/CreateM2MApplication.cs",
"src/WorkOS.net/Entities/CreateMagicCodeAndReturn.cs",
"src/WorkOS.net/Entities/CreateOAuthApplication.cs",
@@ -141,6 +143,7 @@
"src/WorkOS.net/Entities/DirectoryUser.cs",
"src/WorkOS.net/Entities/DirectoryUserEmail.cs",
"src/WorkOS.net/Entities/DirectoryUserWithGroups.cs",
+ "src/WorkOS.net/Entities/DomainVerificationIntentOptions.cs",
"src/WorkOS.net/Entities/DsyncActivated.cs",
"src/WorkOS.net/Entities/DsyncActivatedData.cs",
"src/WorkOS.net/Entities/DsyncActivatedDataDomain.cs",
@@ -170,11 +173,11 @@
"src/WorkOS.net/Entities/EventContextGoogleAnalyticsSession.cs",
"src/WorkOS.net/Entities/EventListListMetadata.cs",
"src/WorkOS.net/Entities/EventSchema.cs",
- "src/WorkOS.net/Entities/EventSchemaContext.cs",
"src/WorkOS.net/Entities/ExternalAuthCompleteResponse.cs",
"src/WorkOS.net/Entities/FeatureFlag.cs",
"src/WorkOS.net/Entities/FeatureFlagOwner.cs",
"src/WorkOS.net/Entities/FlagCreated.cs",
+ "src/WorkOS.net/Entities/FlagCreatedContext.cs",
"src/WorkOS.net/Entities/FlagCreatedData.cs",
"src/WorkOS.net/Entities/FlagDeleted.cs",
"src/WorkOS.net/Entities/FlagRuleUpdated.cs",
@@ -318,6 +321,10 @@
"src/WorkOS.net/Entities/VaultMetadataRead.cs",
"src/WorkOS.net/Entities/VaultNamesListed.cs",
"src/WorkOS.net/Entities/VaultNamesListedData.cs",
+ "src/WorkOS.net/Entities/WaitlistUser.cs",
+ "src/WorkOS.net/Entities/WaitlistUserApproved.cs",
+ "src/WorkOS.net/Entities/WaitlistUserCreated.cs",
+ "src/WorkOS.net/Entities/WaitlistUserDenied.cs",
"src/WorkOS.net/Entities/WebhookEndpointJson.cs",
"src/WorkOS.net/Entities/WidgetSessionToken.cs",
"src/WorkOS.net/Entities/WidgetSessionTokenResponse.cs",
@@ -374,6 +381,7 @@
"src/WorkOS.net/Enums/UserManagementAuthenticationScreenHint.cs",
"src/WorkOS.net/Enums/VaultByokKeyVerificationCompletedDataKeyProvider.cs",
"src/WorkOS.net/Enums/VaultDataCreatedDataActorSource.cs",
+ "src/WorkOS.net/Enums/WaitlistUserState.cs",
"src/WorkOS.net/Enums/WidgetSessionTokenScopes.cs",
"src/WorkOS.net/Services/AdminPortal/AdminPortalService.cs",
"src/WorkOS.net/Services/AdminPortal/_interfaces/AdminPortalOptions.cs",
@@ -392,6 +400,8 @@
"src/WorkOS.net/Services/Events/_interfaces/EventsOptions.cs",
"src/WorkOS.net/Services/FeatureFlags/FeatureFlagsService.cs",
"src/WorkOS.net/Services/FeatureFlags/_interfaces/FeatureFlagsOptions.cs",
+ "src/WorkOS.net/Services/Groups/GroupsService.cs",
+ "src/WorkOS.net/Services/Groups/_interfaces/GroupsOptions.cs",
"src/WorkOS.net/Services/MultiFactorAuth/MultiFactorAuthService.cs",
"src/WorkOS.net/Services/MultiFactorAuth/_interfaces/MultiFactorAuthOptions.cs",
"src/WorkOS.net/Services/OrganizationDomains/OrganizationDomainsService.cs",
@@ -407,6 +417,8 @@
"src/WorkOS.net/Services/UserManagement/UserManagementService.cs",
"src/WorkOS.net/Services/UserManagement/_interfaces/UserManagementOptions.cs",
"src/WorkOS.net/Services/UserManagement/_interfaces/UserManagementWrapperOptions.cs",
+ "src/WorkOS.net/Services/UserManagementOrganizationMembershipGroups/UserManagementOrganizationMembershipGroupsService.cs",
+ "src/WorkOS.net/Services/UserManagementOrganizationMembershipGroups/_interfaces/UserManagementOrganizationMembershipGroupsOptions.cs",
"src/WorkOS.net/Services/Webhooks/WebhooksService.cs",
"src/WorkOS.net/Services/Webhooks/_interfaces/WebhooksOptions.cs",
"src/WorkOS.net/Services/Widgets/WidgetsService.cs",
@@ -419,12 +431,14 @@
"test/WorkOSTests/Tests/DirectorySyncServiceTest.cs",
"test/WorkOSTests/Tests/EventsServiceTest.cs",
"test/WorkOSTests/Tests/FeatureFlagsServiceTest.cs",
+ "test/WorkOSTests/Tests/GroupsServiceTest.cs",
"test/WorkOSTests/Tests/MultiFactorAuthServiceTest.cs",
"test/WorkOSTests/Tests/OrganizationDomainsServiceTest.cs",
"test/WorkOSTests/Tests/OrganizationsServiceTest.cs",
"test/WorkOSTests/Tests/PipesServiceTest.cs",
"test/WorkOSTests/Tests/RadarServiceTest.cs",
"test/WorkOSTests/Tests/SSOServiceTest.cs",
+ "test/WorkOSTests/Tests/UserManagementOrganizationMembershipGroupsServiceTest.cs",
"test/WorkOSTests/Tests/UserManagementServiceTest.cs",
"test/WorkOSTests/Tests/WebhooksServiceTest.cs",
"test/WorkOSTests/Tests/WidgetsServiceTest.cs",
@@ -649,6 +663,9 @@
"test/WorkOSTests/testdata/create_authorization_resource.json",
"test/WorkOSTests/testdata/create_authorization_resource_nulls.json",
"test/WorkOSTests/testdata/create_cors_origin.json",
+ "test/WorkOSTests/testdata/create_group.json",
+ "test/WorkOSTests/testdata/create_group_membership.json",
+ "test/WorkOSTests/testdata/create_group_nulls.json",
"test/WorkOSTests/testdata/create_m2m_application.json",
"test/WorkOSTests/testdata/create_m2m_application_nulls.json",
"test/WorkOSTests/testdata/create_magic_code_and_return.json",
@@ -704,6 +721,8 @@
"test/WorkOSTests/testdata/directory_user_with_groups_email.json",
"test/WorkOSTests/testdata/directory_user_with_groups_email_nulls.json",
"test/WorkOSTests/testdata/directory_user_with_groups_nulls.json",
+ "test/WorkOSTests/testdata/domain_verification_intent_options.json",
+ "test/WorkOSTests/testdata/domain_verification_intent_options_nulls.json",
"test/WorkOSTests/testdata/dsync_activated.json",
"test/WorkOSTests/testdata/dsync_activated_data.json",
"test/WorkOSTests/testdata/dsync_activated_data_domain.json",
@@ -839,6 +858,7 @@
"test/WorkOSTests/testdata/group_updated.json",
"test/WorkOSTests/testdata/group_updated_nulls.json",
"test/WorkOSTests/testdata/intent_options.json",
+ "test/WorkOSTests/testdata/intent_options_nulls.json",
"test/WorkOSTests/testdata/invitation.json",
"test/WorkOSTests/testdata/invitation_accepted.json",
"test/WorkOSTests/testdata/invitation_accepted_data.json",
@@ -886,6 +906,7 @@
"test/WorkOSTests/testdata/list_empty_directory_user_with_groups.json",
"test/WorkOSTests/testdata/list_empty_event_schema.json",
"test/WorkOSTests/testdata/list_empty_flag.json",
+ "test/WorkOSTests/testdata/list_empty_group.json",
"test/WorkOSTests/testdata/list_empty_organization.json",
"test/WorkOSTests/testdata/list_empty_role_assignment.json",
"test/WorkOSTests/testdata/list_empty_user.json",
@@ -896,6 +917,7 @@
"test/WorkOSTests/testdata/list_empty_webhook_endpoint_json.json",
"test/WorkOSTests/testdata/list_event_schema.json",
"test/WorkOSTests/testdata/list_flag.json",
+ "test/WorkOSTests/testdata/list_group.json",
"test/WorkOSTests/testdata/list_organization.json",
"test/WorkOSTests/testdata/list_role_assignment.json",
"test/WorkOSTests/testdata/list_user.json",
@@ -1085,6 +1107,8 @@
"test/WorkOSTests/testdata/update_authorization_permission_nulls.json",
"test/WorkOSTests/testdata/update_authorization_resource.json",
"test/WorkOSTests/testdata/update_authorization_resource_nulls.json",
+ "test/WorkOSTests/testdata/update_group.json",
+ "test/WorkOSTests/testdata/update_group_nulls.json",
"test/WorkOSTests/testdata/update_jwt_template.json",
"test/WorkOSTests/testdata/update_oauth_application.json",
"test/WorkOSTests/testdata/update_oauth_application_nulls.json",
@@ -1160,9 +1184,687 @@
"test/WorkOSTests/testdata/vault_names_listed_nulls.json",
"test/WorkOSTests/testdata/verify_email_address.json",
"test/WorkOSTests/testdata/verify_email_response.json",
+ "test/WorkOSTests/testdata/waitlist_user.json",
+ "test/WorkOSTests/testdata/waitlist_user_approved.json",
+ "test/WorkOSTests/testdata/waitlist_user_approved_nulls.json",
+ "test/WorkOSTests/testdata/waitlist_user_created.json",
+ "test/WorkOSTests/testdata/waitlist_user_created_nulls.json",
+ "test/WorkOSTests/testdata/waitlist_user_denied.json",
+ "test/WorkOSTests/testdata/waitlist_user_denied_nulls.json",
+ "test/WorkOSTests/testdata/waitlist_user_nulls.json",
"test/WorkOSTests/testdata/webhook_endpoint_json.json",
"test/WorkOSTests/testdata/widget_session_token.json",
"test/WorkOSTests/testdata/widget_session_token_nulls.json",
"test/WorkOSTests/testdata/widget_session_token_response.json"
- ]
+ ],
+ "operations": {
+ "POST /api_keys/validations": {
+ "sdkMethod": "CreateValidationAsync",
+ "service": "api_keys"
+ },
+ "DELETE /api_keys/{id}": {
+ "sdkMethod": "DeleteAsync",
+ "service": "api_keys"
+ },
+ "POST /auth/challenges/{id}/verify": {
+ "sdkMethod": "VerifyChallengeAsync",
+ "service": "multi_factor_auth"
+ },
+ "POST /auth/factors/enroll": {
+ "sdkMethod": "EnrollFactorAsync",
+ "service": "multi_factor_auth"
+ },
+ "GET /auth/factors/{id}": {
+ "sdkMethod": "GetFactorAsync",
+ "service": "multi_factor_auth"
+ },
+ "DELETE /auth/factors/{id}": {
+ "sdkMethod": "DeleteFactorAsync",
+ "service": "multi_factor_auth"
+ },
+ "POST /auth/factors/{id}/challenge": {
+ "sdkMethod": "ChallengeFactorAsync",
+ "service": "multi_factor_auth"
+ },
+ "POST /authkit/oauth2/complete": {
+ "sdkMethod": "CompleteOAuth2Async",
+ "service": "connect"
+ },
+ "POST /authorization/organization_memberships/{organization_membership_id}/check": {
+ "sdkMethod": "CheckAsync",
+ "service": "authorization"
+ },
+ "GET /authorization/organization_memberships/{organization_membership_id}/resources": {
+ "sdkMethod": "ListResourcesForMembershipAsync",
+ "service": "authorization"
+ },
+ "GET /authorization/organization_memberships/{organization_membership_id}/resources/{resource_id}/permissions": {
+ "sdkMethod": "ListEffectivePermissionsAsync",
+ "service": "authorization"
+ },
+ "GET /authorization/organization_memberships/{organization_membership_id}/resources/{resource_type_slug}/{external_id}/permissions": {
+ "sdkMethod": "ListEffectivePermissionsByExternalIdAsync",
+ "service": "authorization"
+ },
+ "GET /authorization/organization_memberships/{organization_membership_id}/role_assignments": {
+ "sdkMethod": "ListRoleAssignmentsAsync",
+ "service": "authorization"
+ },
+ "POST /authorization/organization_memberships/{organization_membership_id}/role_assignments": {
+ "sdkMethod": "AssignRoleAsync",
+ "service": "authorization"
+ },
+ "DELETE /authorization/organization_memberships/{organization_membership_id}/role_assignments": {
+ "sdkMethod": "RemoveRoleAsync",
+ "service": "authorization"
+ },
+ "DELETE /authorization/organization_memberships/{organization_membership_id}/role_assignments/{role_assignment_id}": {
+ "sdkMethod": "RemoveRoleAssignmentAsync",
+ "service": "authorization"
+ },
+ "GET /authorization/organizations/{organizationId}/roles": {
+ "sdkMethod": "ListOrganizationRolesAsync",
+ "service": "authorization"
+ },
+ "POST /authorization/organizations/{organizationId}/roles": {
+ "sdkMethod": "CreateOrganizationRoleAsync",
+ "service": "authorization"
+ },
+ "GET /authorization/organizations/{organizationId}/roles/{slug}": {
+ "sdkMethod": "GetOrganizationRoleAsync",
+ "service": "authorization"
+ },
+ "PATCH /authorization/organizations/{organizationId}/roles/{slug}": {
+ "sdkMethod": "UpdateOrganizationRoleAsync",
+ "service": "authorization"
+ },
+ "DELETE /authorization/organizations/{organizationId}/roles/{slug}": {
+ "sdkMethod": "DeleteOrganizationRoleAsync",
+ "service": "authorization"
+ },
+ "POST /authorization/organizations/{organizationId}/roles/{slug}/permissions": {
+ "sdkMethod": "AddOrganizationRolePermissionAsync",
+ "service": "authorization"
+ },
+ "PUT /authorization/organizations/{organizationId}/roles/{slug}/permissions": {
+ "sdkMethod": "SetOrganizationRolePermissionsAsync",
+ "service": "authorization"
+ },
+ "DELETE /authorization/organizations/{organizationId}/roles/{slug}/permissions/{permissionSlug}": {
+ "sdkMethod": "RemoveOrganizationRolePermissionAsync",
+ "service": "authorization"
+ },
+ "GET /authorization/organizations/{organization_id}/resources/{resource_type_slug}/{external_id}": {
+ "sdkMethod": "GetResourceByExternalIdAsync",
+ "service": "authorization"
+ },
+ "PATCH /authorization/organizations/{organization_id}/resources/{resource_type_slug}/{external_id}": {
+ "sdkMethod": "UpdateResourceByExternalIdAsync",
+ "service": "authorization"
+ },
+ "DELETE /authorization/organizations/{organization_id}/resources/{resource_type_slug}/{external_id}": {
+ "sdkMethod": "DeleteResourceByExternalIdAsync",
+ "service": "authorization"
+ },
+ "GET /authorization/organizations/{organization_id}/resources/{resource_type_slug}/{external_id}/organization_memberships": {
+ "sdkMethod": "ListMembershipsForResourceByExternalIdAsync",
+ "service": "authorization"
+ },
+ "GET /authorization/resources": {
+ "sdkMethod": "ListResourcesAsync",
+ "service": "authorization"
+ },
+ "POST /authorization/resources": {
+ "sdkMethod": "CreateResourceAsync",
+ "service": "authorization"
+ },
+ "GET /authorization/resources/{resource_id}": {
+ "sdkMethod": "GetResourceAsync",
+ "service": "authorization"
+ },
+ "PATCH /authorization/resources/{resource_id}": {
+ "sdkMethod": "UpdateResourceAsync",
+ "service": "authorization"
+ },
+ "DELETE /authorization/resources/{resource_id}": {
+ "sdkMethod": "DeleteResourceAsync",
+ "service": "authorization"
+ },
+ "GET /authorization/resources/{resource_id}/organization_memberships": {
+ "sdkMethod": "ListMembershipsForResourceAsync",
+ "service": "authorization"
+ },
+ "GET /authorization/roles": {
+ "sdkMethod": "ListEnvironmentRolesAsync",
+ "service": "authorization"
+ },
+ "POST /authorization/roles": {
+ "sdkMethod": "CreateEnvironmentRoleAsync",
+ "service": "authorization"
+ },
+ "GET /authorization/roles/{slug}": {
+ "sdkMethod": "GetEnvironmentRoleAsync",
+ "service": "authorization"
+ },
+ "PATCH /authorization/roles/{slug}": {
+ "sdkMethod": "UpdateEnvironmentRoleAsync",
+ "service": "authorization"
+ },
+ "POST /authorization/roles/{slug}/permissions": {
+ "sdkMethod": "AddEnvironmentRolePermissionAsync",
+ "service": "authorization"
+ },
+ "PUT /authorization/roles/{slug}/permissions": {
+ "sdkMethod": "SetEnvironmentRolePermissionsAsync",
+ "service": "authorization"
+ },
+ "GET /authorization/permissions": {
+ "sdkMethod": "ListPermissionsAsync",
+ "service": "authorization"
+ },
+ "POST /authorization/permissions": {
+ "sdkMethod": "CreatePermissionAsync",
+ "service": "authorization"
+ },
+ "GET /authorization/permissions/{slug}": {
+ "sdkMethod": "GetPermissionAsync",
+ "service": "authorization"
+ },
+ "PATCH /authorization/permissions/{slug}": {
+ "sdkMethod": "UpdatePermissionAsync",
+ "service": "authorization"
+ },
+ "DELETE /authorization/permissions/{slug}": {
+ "sdkMethod": "DeletePermissionAsync",
+ "service": "authorization"
+ },
+ "GET /connect/applications": {
+ "sdkMethod": "ListApplicationsAsync",
+ "service": "connect"
+ },
+ "POST /connect/applications": {
+ "sdkMethod": "CreateApplicationAsync",
+ "service": "connect"
+ },
+ "GET /connect/applications/{id}": {
+ "sdkMethod": "GetApplicationAsync",
+ "service": "connect"
+ },
+ "PUT /connect/applications/{id}": {
+ "sdkMethod": "UpdateApplicationAsync",
+ "service": "connect"
+ },
+ "DELETE /connect/applications/{id}": {
+ "sdkMethod": "DeleteApplicationAsync",
+ "service": "connect"
+ },
+ "GET /connect/applications/{id}/client_secrets": {
+ "sdkMethod": "ListApplicationClientSecretsAsync",
+ "service": "connect"
+ },
+ "POST /connect/applications/{id}/client_secrets": {
+ "sdkMethod": "CreateApplicationClientSecretAsync",
+ "service": "connect"
+ },
+ "DELETE /connect/client_secrets/{id}": {
+ "sdkMethod": "DeleteClientSecretAsync",
+ "service": "connect"
+ },
+ "GET /connections": {
+ "sdkMethod": "ListConnectionsAsync",
+ "service": "sso"
+ },
+ "GET /connections/{id}": {
+ "sdkMethod": "GetConnectionAsync",
+ "service": "sso"
+ },
+ "DELETE /connections/{id}": {
+ "sdkMethod": "DeleteConnectionAsync",
+ "service": "sso"
+ },
+ "POST /data-integrations/{slug}/authorize": {
+ "sdkMethod": "AuthorizeDataIntegrationAsync",
+ "service": "pipes"
+ },
+ "POST /data-integrations/{slug}/token": {
+ "sdkMethod": "CreateDataIntegrationTokenAsync",
+ "service": "pipes"
+ },
+ "GET /directories": {
+ "sdkMethod": "ListAsync",
+ "service": "directory_sync"
+ },
+ "GET /directories/{id}": {
+ "sdkMethod": "GetAsync",
+ "service": "directory_sync"
+ },
+ "DELETE /directories/{id}": {
+ "sdkMethod": "DeleteAsync",
+ "service": "directory_sync"
+ },
+ "GET /directory_groups": {
+ "sdkMethod": "ListGroupsAsync",
+ "service": "directory_sync"
+ },
+ "GET /directory_groups/{id}": {
+ "sdkMethod": "GetGroupAsync",
+ "service": "directory_sync"
+ },
+ "GET /directory_users": {
+ "sdkMethod": "ListUsersAsync",
+ "service": "directory_sync"
+ },
+ "GET /directory_users/{id}": {
+ "sdkMethod": "GetUserAsync",
+ "service": "directory_sync"
+ },
+ "GET /events": {
+ "sdkMethod": "ListAsync",
+ "service": "events"
+ },
+ "GET /feature-flags": {
+ "sdkMethod": "ListAsync",
+ "service": "feature_flags"
+ },
+ "GET /feature-flags/{slug}": {
+ "sdkMethod": "GetAsync",
+ "service": "feature_flags"
+ },
+ "PUT /feature-flags/{slug}/disable": {
+ "sdkMethod": "DisableAsync",
+ "service": "feature_flags"
+ },
+ "PUT /feature-flags/{slug}/enable": {
+ "sdkMethod": "EnableAsync",
+ "service": "feature_flags"
+ },
+ "POST /feature-flags/{slug}/targets/{resourceId}": {
+ "sdkMethod": "AddFlagTargetAsync",
+ "service": "feature_flags"
+ },
+ "DELETE /feature-flags/{slug}/targets/{resourceId}": {
+ "sdkMethod": "RemoveFlagTargetAsync",
+ "service": "feature_flags"
+ },
+ "POST /organization_domains": {
+ "sdkMethod": "CreateAsync",
+ "service": "organization_domains"
+ },
+ "GET /organization_domains/{id}": {
+ "sdkMethod": "GetAsync",
+ "service": "organization_domains"
+ },
+ "DELETE /organization_domains/{id}": {
+ "sdkMethod": "DeleteAsync",
+ "service": "organization_domains"
+ },
+ "POST /organization_domains/{id}/verify": {
+ "sdkMethod": "VerifyAsync",
+ "service": "organization_domains"
+ },
+ "GET /organizations": {
+ "sdkMethod": "ListAsync",
+ "service": "organizations"
+ },
+ "POST /organizations": {
+ "sdkMethod": "CreateAsync",
+ "service": "organizations"
+ },
+ "GET /organizations/external_id/{external_id}": {
+ "sdkMethod": "GetByExternalIdAsync",
+ "service": "organizations"
+ },
+ "GET /organizations/{id}": {
+ "sdkMethod": "GetAsync",
+ "service": "organizations"
+ },
+ "PUT /organizations/{id}": {
+ "sdkMethod": "UpdateAsync",
+ "service": "organizations"
+ },
+ "DELETE /organizations/{id}": {
+ "sdkMethod": "DeleteAsync",
+ "service": "organizations"
+ },
+ "GET /organizations/{id}/audit_log_configuration": {
+ "sdkMethod": "GetAuditLogConfigurationAsync",
+ "service": "organizations"
+ },
+ "GET /organizations/{id}/audit_logs_retention": {
+ "sdkMethod": "GetAuditLogsRetentionAsync",
+ "service": "audit_logs"
+ },
+ "PUT /organizations/{id}/audit_logs_retention": {
+ "sdkMethod": "UpdateAuditLogsRetentionAsync",
+ "service": "audit_logs"
+ },
+ "GET /organizations/{organizationId}/api_keys": {
+ "sdkMethod": "ListOrganizationApiKeysAsync",
+ "service": "api_keys"
+ },
+ "POST /organizations/{organizationId}/api_keys": {
+ "sdkMethod": "CreateOrganizationApiKeyAsync",
+ "service": "api_keys"
+ },
+ "GET /organizations/{organizationId}/feature-flags": {
+ "sdkMethod": "ListOrganizationFeatureFlagsAsync",
+ "service": "feature_flags"
+ },
+ "GET /organizations/{organizationId}/groups": {
+ "sdkMethod": "ListOrganizationGroupsAsync",
+ "service": "groups"
+ },
+ "POST /organizations/{organizationId}/groups": {
+ "sdkMethod": "CreateOrganizationGroupAsync",
+ "service": "groups"
+ },
+ "GET /organizations/{organizationId}/groups/{groupId}": {
+ "sdkMethod": "GetOrganizationGroupAsync",
+ "service": "groups"
+ },
+ "PATCH /organizations/{organizationId}/groups/{groupId}": {
+ "sdkMethod": "UpdateOrganizationGroupAsync",
+ "service": "groups"
+ },
+ "DELETE /organizations/{organizationId}/groups/{groupId}": {
+ "sdkMethod": "DeleteOrganizationGroupAsync",
+ "service": "groups"
+ },
+ "GET /organizations/{organizationId}/groups/{groupId}/organization-memberships": {
+ "sdkMethod": "ListOrganizationMembershipsAsync",
+ "service": "groups"
+ },
+ "POST /organizations/{organizationId}/groups/{groupId}/organization-memberships": {
+ "sdkMethod": "CreateOrganizationMembershipAsync",
+ "service": "groups"
+ },
+ "DELETE /organizations/{organizationId}/groups/{groupId}/organization-memberships/{omId}": {
+ "sdkMethod": "DeleteOrganizationMembershipAsync",
+ "service": "groups"
+ },
+ "POST /portal/generate_link": {
+ "sdkMethod": "GenerateLinkAsync",
+ "service": "admin_portal"
+ },
+ "POST /radar/attempts": {
+ "sdkMethod": "CreateAttemptAsync",
+ "service": "radar"
+ },
+ "PUT /radar/attempts/{id}": {
+ "sdkMethod": "UpdateAttemptAsync",
+ "service": "radar"
+ },
+ "POST /radar/lists/{type}/{action}": {
+ "sdkMethod": "AddListEntryAsync",
+ "service": "radar"
+ },
+ "DELETE /radar/lists/{type}/{action}": {
+ "sdkMethod": "RemoveListEntryAsync",
+ "service": "radar"
+ },
+ "GET /sso/authorize": {
+ "sdkMethod": "GetAuthorizationUrl",
+ "service": "sso"
+ },
+ "GET /sso/logout": {
+ "sdkMethod": "GetLogoutUrl",
+ "service": "sso"
+ },
+ "POST /sso/logout/authorize": {
+ "sdkMethod": "AuthorizeLogoutAsync",
+ "service": "sso"
+ },
+ "GET /sso/profile": {
+ "sdkMethod": "GetProfileAsync",
+ "service": "sso"
+ },
+ "POST /sso/token": {
+ "sdkMethod": "GetProfileAndTokenAsync",
+ "service": "sso"
+ },
+ "GET /sso/jwks/{clientId}": {
+ "sdkMethod": "GetJwksAsync",
+ "service": "user_management"
+ },
+ "POST /user_management/authenticate": {
+ "sdkMethod": "CreateAuthenticateAsync",
+ "service": "user_management"
+ },
+ "GET /user_management/authorize": {
+ "sdkMethod": "GetAuthorizationUrl",
+ "service": "user_management"
+ },
+ "POST /user_management/authorize/device": {
+ "sdkMethod": "CreateDeviceAsync",
+ "service": "user_management"
+ },
+ "GET /user_management/sessions/logout": {
+ "sdkMethod": "GetLogoutUrl",
+ "service": "user_management"
+ },
+ "POST /user_management/sessions/revoke": {
+ "sdkMethod": "RevokeSessionAsync",
+ "service": "user_management"
+ },
+ "POST /user_management/cors_origins": {
+ "sdkMethod": "CreateCorsOriginAsync",
+ "service": "user_management"
+ },
+ "GET /user_management/email_verification/{id}": {
+ "sdkMethod": "GetEmailVerificationAsync",
+ "service": "user_management"
+ },
+ "POST /user_management/password_reset": {
+ "sdkMethod": "ResetPasswordAsync",
+ "service": "user_management"
+ },
+ "POST /user_management/password_reset/confirm": {
+ "sdkMethod": "ConfirmPasswordResetAsync",
+ "service": "user_management"
+ },
+ "GET /user_management/password_reset/{id}": {
+ "sdkMethod": "GetPasswordResetAsync",
+ "service": "user_management"
+ },
+ "GET /user_management/users": {
+ "sdkMethod": "ListAsync",
+ "service": "user_management"
+ },
+ "POST /user_management/users": {
+ "sdkMethod": "CreateAsync",
+ "service": "user_management"
+ },
+ "GET /user_management/users/external_id/{external_id}": {
+ "sdkMethod": "GetByExternalIdAsync",
+ "service": "user_management"
+ },
+ "GET /user_management/users/{id}": {
+ "sdkMethod": "GetAsync",
+ "service": "user_management"
+ },
+ "PUT /user_management/users/{id}": {
+ "sdkMethod": "UpdateAsync",
+ "service": "user_management"
+ },
+ "DELETE /user_management/users/{id}": {
+ "sdkMethod": "DeleteAsync",
+ "service": "user_management"
+ },
+ "POST /user_management/users/{id}/email_change/confirm": {
+ "sdkMethod": "ConfirmEmailChangeAsync",
+ "service": "user_management"
+ },
+ "POST /user_management/users/{id}/email_change/send": {
+ "sdkMethod": "SendEmailChangeAsync",
+ "service": "user_management"
+ },
+ "POST /user_management/users/{id}/email_verification/confirm": {
+ "sdkMethod": "VerifyEmailAsync",
+ "service": "user_management"
+ },
+ "POST /user_management/users/{id}/email_verification/send": {
+ "sdkMethod": "SendVerificationEmailAsync",
+ "service": "user_management"
+ },
+ "GET /user_management/users/{id}/identities": {
+ "sdkMethod": "GetIdentitiesAsync",
+ "service": "user_management"
+ },
+ "GET /user_management/users/{id}/sessions": {
+ "sdkMethod": "ListSessionsAsync",
+ "service": "user_management"
+ },
+ "GET /user_management/invitations": {
+ "sdkMethod": "ListInvitationsAsync",
+ "service": "user_management"
+ },
+ "POST /user_management/invitations": {
+ "sdkMethod": "SendInvitationAsync",
+ "service": "user_management"
+ },
+ "GET /user_management/invitations/by_token/{token}": {
+ "sdkMethod": "FindInvitationByTokenAsync",
+ "service": "user_management"
+ },
+ "GET /user_management/invitations/{id}": {
+ "sdkMethod": "GetInvitationAsync",
+ "service": "user_management"
+ },
+ "POST /user_management/invitations/{id}/accept": {
+ "sdkMethod": "AcceptInvitationAsync",
+ "service": "user_management"
+ },
+ "POST /user_management/invitations/{id}/resend": {
+ "sdkMethod": "ResendInvitationAsync",
+ "service": "user_management"
+ },
+ "POST /user_management/invitations/{id}/revoke": {
+ "sdkMethod": "RevokeInvitationAsync",
+ "service": "user_management"
+ },
+ "PUT /user_management/jwt_template": {
+ "sdkMethod": "UpdateJWTTemplateAsync",
+ "service": "user_management"
+ },
+ "POST /user_management/magic_auth": {
+ "sdkMethod": "CreateMagicAuthAsync",
+ "service": "user_management"
+ },
+ "GET /user_management/magic_auth/{id}": {
+ "sdkMethod": "GetMagicAuthAsync",
+ "service": "user_management"
+ },
+ "GET /user_management/organization_memberships": {
+ "sdkMethod": "ListOrganizationMembershipsAsync",
+ "service": "user_management"
+ },
+ "POST /user_management/organization_memberships": {
+ "sdkMethod": "CreateOrganizationMembershipAsync",
+ "service": "user_management"
+ },
+ "GET /user_management/organization_memberships/{id}": {
+ "sdkMethod": "GetOrganizationMembershipAsync",
+ "service": "user_management"
+ },
+ "PUT /user_management/organization_memberships/{id}": {
+ "sdkMethod": "UpdateOrganizationMembershipAsync",
+ "service": "user_management"
+ },
+ "DELETE /user_management/organization_memberships/{id}": {
+ "sdkMethod": "DeleteOrganizationMembershipAsync",
+ "service": "user_management"
+ },
+ "PUT /user_management/organization_memberships/{id}/deactivate": {
+ "sdkMethod": "DeactivateOrganizationMembershipAsync",
+ "service": "user_management"
+ },
+ "PUT /user_management/organization_memberships/{id}/reactivate": {
+ "sdkMethod": "ReactivateOrganizationMembershipAsync",
+ "service": "user_management"
+ },
+ "GET /user_management/organization_memberships/{omId}/groups": {
+ "sdkMethod": "ListOrganizationMembershipGroupsAsync",
+ "service": "user_management_organization_membership_groups"
+ },
+ "POST /user_management/redirect_uris": {
+ "sdkMethod": "CreateRedirectUriAsync",
+ "service": "user_management"
+ },
+ "GET /user_management/users/{userId}/feature-flags": {
+ "sdkMethod": "ListUserFeatureFlagsAsync",
+ "service": "feature_flags"
+ },
+ "GET /user_management/users/{user_id}/authorized_applications": {
+ "sdkMethod": "ListAuthorizedApplicationsAsync",
+ "service": "user_management"
+ },
+ "DELETE /user_management/users/{user_id}/authorized_applications/{application_id}": {
+ "sdkMethod": "DeleteAuthorizedApplicationAsync",
+ "service": "user_management"
+ },
+ "GET /user_management/users/{user_id}/connected_accounts/{slug}": {
+ "sdkMethod": "GetUserConnectedAccountAsync",
+ "service": "pipes"
+ },
+ "DELETE /user_management/users/{user_id}/connected_accounts/{slug}": {
+ "sdkMethod": "DeleteUserConnectedAccountAsync",
+ "service": "pipes"
+ },
+ "GET /user_management/users/{user_id}/data_providers": {
+ "sdkMethod": "ListUserDataProvidersAsync",
+ "service": "pipes"
+ },
+ "GET /user_management/users/{userlandUserId}/auth_factors": {
+ "sdkMethod": "ListUserAuthFactorsAsync",
+ "service": "multi_factor_auth"
+ },
+ "POST /user_management/users/{userlandUserId}/auth_factors": {
+ "sdkMethod": "CreateUserAuthFactorAsync",
+ "service": "multi_factor_auth"
+ },
+ "GET /webhook_endpoints": {
+ "sdkMethod": "ListEndpointsAsync",
+ "service": "webhooks"
+ },
+ "POST /webhook_endpoints": {
+ "sdkMethod": "CreateEndpointAsync",
+ "service": "webhooks"
+ },
+ "PATCH /webhook_endpoints/{id}": {
+ "sdkMethod": "UpdateEndpointAsync",
+ "service": "webhooks"
+ },
+ "DELETE /webhook_endpoints/{id}": {
+ "sdkMethod": "DeleteEndpointAsync",
+ "service": "webhooks"
+ },
+ "POST /widgets/token": {
+ "sdkMethod": "CreateTokenAsync",
+ "service": "widgets"
+ },
+ "GET /audit_logs/actions": {
+ "sdkMethod": "ListActionsAsync",
+ "service": "audit_logs"
+ },
+ "GET /audit_logs/actions/{actionName}/schemas": {
+ "sdkMethod": "ListActionSchemasAsync",
+ "service": "audit_logs"
+ },
+ "POST /audit_logs/actions/{actionName}/schemas": {
+ "sdkMethod": "CreateSchemaAsync",
+ "service": "audit_logs"
+ },
+ "POST /audit_logs/events": {
+ "sdkMethod": "CreateEventAsync",
+ "service": "audit_logs"
+ },
+ "POST /audit_logs/exports": {
+ "sdkMethod": "CreateExportAsync",
+ "service": "audit_logs"
+ },
+ "GET /audit_logs/exports/{auditLogExportId}": {
+ "sdkMethod": "GetExportAsync",
+ "service": "audit_logs"
+ }
+ }
}
diff --git a/src/WorkOS.net/Client/WorkOSClient.Generated.cs b/src/WorkOS.net/Client/WorkOSClient.Generated.cs
index eb48fa3f..424bfa2e 100644
--- a/src/WorkOS.net/Client/WorkOSClient.Generated.cs
+++ b/src/WorkOS.net/Client/WorkOSClient.Generated.cs
@@ -62,6 +62,11 @@ public partial class WorkOSClient
/// Gets the for organizations API operations.
public virtual OrganizationsService Organizations => this.organizations ??= new OrganizationsService(this);
+ private GroupsService groups;
+
+ /// Gets the for groups API operations.
+ public virtual GroupsService Groups => this.groups ??= new GroupsService(this);
+
private AdminPortalService adminPortal;
/// Gets the for admin portal API operations.
@@ -77,6 +82,11 @@ public partial class WorkOSClient
/// Gets the for user management API operations.
public virtual UserManagementService UserManagement => this.userManagement ??= new UserManagementService(this);
+ private UserManagementOrganizationMembershipGroupsService userManagementOrganizationMembershipGroups;
+
+ /// Gets the for user management organization membership groups API operations.
+ public virtual UserManagementOrganizationMembershipGroupsService UserManagementOrganizationMembershipGroups => this.userManagementOrganizationMembershipGroups ??= new UserManagementOrganizationMembershipGroupsService(this);
+
private WebhooksService webhooks;
/// Gets the for webhooks API operations.
diff --git a/src/WorkOS.net/Entities/CreateGroup.cs b/src/WorkOS.net/Entities/CreateGroup.cs
new file mode 100644
index 00000000..654cbcba
--- /dev/null
+++ b/src/WorkOS.net/Entities/CreateGroup.cs
@@ -0,0 +1,16 @@
+// This file is auto-generated by oagen. Do not edit.
+
+namespace WorkOS
+{
+
+ /// Represents a create group.
+ public class CreateGroup
+ {
+
+ /// The name of the Group.
+ public string Name { get; set; } = default!;
+
+ /// An optional description of the Group.
+ public string? Description { get; set; }
+ }
+}
diff --git a/src/WorkOS.net/Entities/CreateGroupMembership.cs b/src/WorkOS.net/Entities/CreateGroupMembership.cs
new file mode 100644
index 00000000..5b224d5a
--- /dev/null
+++ b/src/WorkOS.net/Entities/CreateGroupMembership.cs
@@ -0,0 +1,13 @@
+// This file is auto-generated by oagen. Do not edit.
+
+namespace WorkOS
+{
+
+ /// Represents a create group membership.
+ public class CreateGroupMembership
+ {
+
+ /// The ID of the Organization Membership to add to the group.
+ public string OrganizationMembershipId { get; set; } = default!;
+ }
+}
diff --git a/src/WorkOS.net/Entities/DirectoryUserWithGroups.cs b/src/WorkOS.net/Entities/DirectoryUserWithGroups.cs
index 61266a7f..e311b11b 100644
--- a/src/WorkOS.net/Entities/DirectoryUserWithGroups.cs
+++ b/src/WorkOS.net/Entities/DirectoryUserWithGroups.cs
@@ -69,7 +69,8 @@ public class DirectoryUserWithGroups
/// An ISO 8601 timestamp.
public DateTimeOffset UpdatedAt { get; set; }
- /// The directory groups the user belongs to.
+ /// The directory groups the user belongs to. Use the List Directory Groups endpoint with a user filter instead.
+ [System.Obsolete("This field is deprecated.")]
public List Groups { get; set; } = default!;
///
diff --git a/src/WorkOS.net/Entities/DomainVerificationIntentOptions.cs b/src/WorkOS.net/Entities/DomainVerificationIntentOptions.cs
new file mode 100644
index 00000000..bf376c5e
--- /dev/null
+++ b/src/WorkOS.net/Entities/DomainVerificationIntentOptions.cs
@@ -0,0 +1,13 @@
+// This file is auto-generated by oagen. Do not edit.
+
+namespace WorkOS
+{
+
+ /// Represents a domain verification intent options.
+ public class DomainVerificationIntentOptions
+ {
+
+ /// The domain name to verify. When provided, the domain verification flow will skip the domain entry form and go directly to the verification step.
+ public string? DomainName { get; set; }
+ }
+}
diff --git a/src/WorkOS.net/Entities/EventSchema.cs b/src/WorkOS.net/Entities/EventSchema.cs
index 6f8f7ac3..6e6dea3b 100644
--- a/src/WorkOS.net/Entities/EventSchema.cs
+++ b/src/WorkOS.net/Entities/EventSchema.cs
@@ -2,103 +2,9 @@
namespace WorkOS
{
- using System;
- using System.Collections.Generic;
/// An event emitted by WorkOS.
public class EventSchema
{
-
- /// Distinguishes the Event object.
- public string Object { get; internal set; } = "event";
-
- /// Unique identifier for the Event.
- public string Id { get; set; } = default!;
-
- /// The type of event that occurred.
- public string Event { get; set; } = default!;
-
- /// The event payload.
- public Dictionary Data { get; set; } = default!;
-
- /// An ISO 8601 timestamp.
- public DateTimeOffset CreatedAt { get; set; }
-
- /// Additional context about the event.
- public Dictionary? Context { get; set; }
-
- ///
- /// Typed accessor for . Returns the value stored under
- /// coerced to , or the default
- /// value when the key is missing or the value is not convertible.
- ///
- /// Expected value type.
- /// The key to look up.
- public T? GetDataAttribute(string key)
- {
- if (this.Data == null)
- {
- return default;
- }
-
- if (!this.Data.TryGetValue(key, out var value))
- {
- return default;
- }
-
- if (value is T typed)
- {
- return typed;
- }
-
- if (value is Newtonsoft.Json.Linq.JToken token)
- {
- return token.ToObject();
- }
-
- if (value is System.Text.Json.JsonElement element)
- {
- return System.Text.Json.JsonSerializer.Deserialize(element.GetRawText());
- }
-
- return default;
- }
-
- ///
- /// Typed accessor for . Returns the value stored under
- /// coerced to , or the default
- /// value when the key is missing or the value is not convertible.
- ///
- /// Expected value type.
- /// The key to look up.
- public T? GetContextAttribute(string key)
- {
- if (this.Context == null)
- {
- return default;
- }
-
- if (!this.Context.TryGetValue(key, out var value))
- {
- return default;
- }
-
- if (value is T typed)
- {
- return typed;
- }
-
- if (value is Newtonsoft.Json.Linq.JToken token)
- {
- return token.ToObject();
- }
-
- if (value is System.Text.Json.JsonElement element)
- {
- return System.Text.Json.JsonSerializer.Deserialize(element.GetRawText());
- }
-
- return default;
- }
}
}
diff --git a/src/WorkOS.net/Entities/FlagCreated.cs b/src/WorkOS.net/Entities/FlagCreated.cs
index 0eab75b0..35f88a1d 100644
--- a/src/WorkOS.net/Entities/FlagCreated.cs
+++ b/src/WorkOS.net/Entities/FlagCreated.cs
@@ -19,7 +19,7 @@ public class FlagCreated
public DateTimeOffset CreatedAt { get; set; }
/// Additional context about the event.
- public EventSchemaContext Context { get; set; } = default!;
+ public FlagCreatedContext Context { get; set; } = default!;
/// Distinguishes the Event object.
public string Object { get; internal set; } = "event";
diff --git a/src/WorkOS.net/Entities/EventSchemaContext.cs b/src/WorkOS.net/Entities/FlagCreatedContext.cs
similarity index 92%
rename from src/WorkOS.net/Entities/EventSchemaContext.cs
rename to src/WorkOS.net/Entities/FlagCreatedContext.cs
index fa9a4885..f685b616 100644
--- a/src/WorkOS.net/Entities/EventSchemaContext.cs
+++ b/src/WorkOS.net/Entities/FlagCreatedContext.cs
@@ -4,7 +4,7 @@ namespace WorkOS
{
/// Additional context about the event.
- public class EventSchemaContext
+ public class FlagCreatedContext
{
/// The client ID associated with the flag event.
diff --git a/src/WorkOS.net/Entities/FlagDeleted.cs b/src/WorkOS.net/Entities/FlagDeleted.cs
index 7dfa487a..d4ea2172 100644
--- a/src/WorkOS.net/Entities/FlagDeleted.cs
+++ b/src/WorkOS.net/Entities/FlagDeleted.cs
@@ -19,7 +19,7 @@ public class FlagDeleted
public DateTimeOffset CreatedAt { get; set; }
/// Additional context about the event.
- public EventSchemaContext Context { get; set; } = default!;
+ public FlagCreatedContext Context { get; set; } = default!;
/// Distinguishes the Event object.
public string Object { get; internal set; } = "event";
diff --git a/src/WorkOS.net/Entities/GenerateLink.cs b/src/WorkOS.net/Entities/GenerateLink.cs
index 65c94eed..7faab1f6 100644
--- a/src/WorkOS.net/Entities/GenerateLink.cs
+++ b/src/WorkOS.net/Entities/GenerateLink.cs
@@ -32,7 +32,7 @@ public class GenerateLink
/// Options to configure the Admin Portal based on the intent.
public IntentOptions? IntentOptions { get; set; }
- /// The email addresses of the IT admins to grant access to the Admin Portal for the given organization. Accepts up to 20 emails.
- public List? AdminEmails { get; set; }
+ /// The email addresses of the IT contacts to grant access to the Admin Portal for the given organization. Accepts up to 20 emails.
+ public List? ItContactEmails { get; set; }
}
}
diff --git a/src/WorkOS.net/Entities/IntentOptions.cs b/src/WorkOS.net/Entities/IntentOptions.cs
index 976c8c5c..bc3b1bf6 100644
--- a/src/WorkOS.net/Entities/IntentOptions.cs
+++ b/src/WorkOS.net/Entities/IntentOptions.cs
@@ -8,6 +8,9 @@ public class IntentOptions
{
/// SSO-specific options for the Admin Portal.
- public SSOIntentOptions SSO { get; set; } = default!;
+ public SSOIntentOptions? SSO { get; set; }
+
+ /// Domain verification-specific options for the Admin Portal.
+ public DomainVerificationIntentOptions? DomainVerification { get; set; }
}
}
diff --git a/src/WorkOS.net/Entities/Invitation.cs b/src/WorkOS.net/Entities/Invitation.cs
index bccd28bc..b7860008 100644
--- a/src/WorkOS.net/Entities/Invitation.cs
+++ b/src/WorkOS.net/Entities/Invitation.cs
@@ -42,6 +42,9 @@ public class Invitation
/// The ID of the user who accepted the invitation, once accepted.
public string? AcceptedUserId { get; set; }
+ /// Slug of the role the invitee will be assigned on acceptance. Reflects the current role on the invitee's organization membership. null when the invitation has no associated organization.
+ public string? RoleSlug { get; set; }
+
/// An ISO 8601 timestamp.
public DateTimeOffset CreatedAt { get; set; }
diff --git a/src/WorkOS.net/Entities/InvitationAcceptedData.cs b/src/WorkOS.net/Entities/InvitationAcceptedData.cs
index 400ab4ee..5c1d5e61 100644
--- a/src/WorkOS.net/Entities/InvitationAcceptedData.cs
+++ b/src/WorkOS.net/Entities/InvitationAcceptedData.cs
@@ -42,6 +42,9 @@ public class InvitationAcceptedData
/// The ID of the user who accepted the invitation, once accepted.
public string? AcceptedUserId { get; set; }
+ /// Slug of the role the invitee will be assigned on acceptance. Reflects the current role on the invitee's organization membership. null when the invitation has no associated organization.
+ public string? RoleSlug { get; set; }
+
/// An ISO 8601 timestamp.
public DateTimeOffset CreatedAt { get; set; }
diff --git a/src/WorkOS.net/Entities/WaitlistUser.cs b/src/WorkOS.net/Entities/WaitlistUser.cs
new file mode 100644
index 00000000..0304b98c
--- /dev/null
+++ b/src/WorkOS.net/Entities/WaitlistUser.cs
@@ -0,0 +1,36 @@
+// This file is auto-generated by oagen. Do not edit.
+
+namespace WorkOS
+{
+ using System;
+ using Newtonsoft.Json;
+ using STJS = System.Text.Json.Serialization;
+
+ /// Represents a waitlist user.
+ public class WaitlistUser
+ {
+
+ /// Distinguishes the Waitlist User object.
+ public string Object { get; internal set; } = "waitlist_user";
+
+ /// The unique ID of the Waitlist User.
+ public string Id { get; set; } = default!;
+
+ /// The email address of the Waitlist User.
+ public string Email { get; set; } = default!;
+
+ /// The state of the Waitlist User.
+ [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
+ [STJS.JsonIgnore(Condition = STJS.JsonIgnoreCondition.WhenWritingDefault)]
+ public WaitlistUserState State { get; set; }
+
+ /// The timestamp when the Waitlist User was approved, or null if not yet approved.
+ public DateTimeOffset? ApprovedAt { get; set; }
+
+ /// An ISO 8601 timestamp.
+ public DateTimeOffset CreatedAt { get; set; }
+
+ /// An ISO 8601 timestamp.
+ public DateTimeOffset UpdatedAt { get; set; }
+ }
+}
diff --git a/src/WorkOS.net/Entities/WaitlistUserApproved.cs b/src/WorkOS.net/Entities/WaitlistUserApproved.cs
new file mode 100644
index 00000000..d3b3589c
--- /dev/null
+++ b/src/WorkOS.net/Entities/WaitlistUserApproved.cs
@@ -0,0 +1,25 @@
+// This file is auto-generated by oagen. Do not edit.
+
+namespace WorkOS
+{
+ using System;
+
+ /// Represents a waitlist user approved.
+ public class WaitlistUserApproved
+ {
+
+ /// Unique identifier for the event.
+ public string Id { get; set; } = default!;
+ public string Event { get; internal set; } = "waitlist_user.approved";
+
+ /// The event payload.
+ public WaitlistUser Data { get; set; } = default!;
+
+ /// An ISO 8601 timestamp.
+ public DateTimeOffset CreatedAt { get; set; }
+ public EventContext? Context { get; set; }
+
+ /// Distinguishes the Event object.
+ public string Object { get; internal set; } = "event";
+ }
+}
diff --git a/src/WorkOS.net/Entities/WaitlistUserCreated.cs b/src/WorkOS.net/Entities/WaitlistUserCreated.cs
new file mode 100644
index 00000000..c96ca50b
--- /dev/null
+++ b/src/WorkOS.net/Entities/WaitlistUserCreated.cs
@@ -0,0 +1,25 @@
+// This file is auto-generated by oagen. Do not edit.
+
+namespace WorkOS
+{
+ using System;
+
+ /// Represents a waitlist user created.
+ public class WaitlistUserCreated
+ {
+
+ /// Unique identifier for the event.
+ public string Id { get; set; } = default!;
+ public string Event { get; internal set; } = "waitlist_user.created";
+
+ /// The event payload.
+ public WaitlistUser Data { get; set; } = default!;
+
+ /// An ISO 8601 timestamp.
+ public DateTimeOffset CreatedAt { get; set; }
+ public EventContext? Context { get; set; }
+
+ /// Distinguishes the Event object.
+ public string Object { get; internal set; } = "event";
+ }
+}
diff --git a/src/WorkOS.net/Entities/WaitlistUserDenied.cs b/src/WorkOS.net/Entities/WaitlistUserDenied.cs
new file mode 100644
index 00000000..65197318
--- /dev/null
+++ b/src/WorkOS.net/Entities/WaitlistUserDenied.cs
@@ -0,0 +1,25 @@
+// This file is auto-generated by oagen. Do not edit.
+
+namespace WorkOS
+{
+ using System;
+
+ /// Represents a waitlist user denied.
+ public class WaitlistUserDenied
+ {
+
+ /// Unique identifier for the event.
+ public string Id { get; set; } = default!;
+ public string Event { get; internal set; } = "waitlist_user.denied";
+
+ /// The event payload.
+ public WaitlistUser Data { get; set; } = default!;
+
+ /// An ISO 8601 timestamp.
+ public DateTimeOffset CreatedAt { get; set; }
+ public EventContext? Context { get; set; }
+
+ /// Distinguishes the Event object.
+ public string Object { get; internal set; } = "event";
+ }
+}
diff --git a/src/WorkOS.net/Enums/CreateWebhookEndpointEvents.cs b/src/WorkOS.net/Enums/CreateWebhookEndpointEvents.cs
index 3f22176b..b0c9260e 100644
--- a/src/WorkOS.net/Enums/CreateWebhookEndpointEvents.cs
+++ b/src/WorkOS.net/Enums/CreateWebhookEndpointEvents.cs
@@ -162,5 +162,11 @@ public enum CreateWebhookEndpointEvents
SessionCreated,
[EnumMember(Value = "session.revoked")]
SessionRevoked,
+ [EnumMember(Value = "waitlist_user.approved")]
+ WaitlistUserApproved,
+ [EnumMember(Value = "waitlist_user.created")]
+ WaitlistUserCreated,
+ [EnumMember(Value = "waitlist_user.denied")]
+ WaitlistUserDenied,
}
}
diff --git a/src/WorkOS.net/Enums/SSOProvider.cs b/src/WorkOS.net/Enums/SSOProvider.cs
index 479cc684..bc3532a9 100644
--- a/src/WorkOS.net/Enums/SSOProvider.cs
+++ b/src/WorkOS.net/Enums/SSOProvider.cs
@@ -16,11 +16,29 @@ public enum SSOProvider
[EnumMember(Value = "AppleOAuth")]
AppleOAuth,
+ [EnumMember(Value = "BitbucketOAuth")]
+ BitbucketOAuth,
[EnumMember(Value = "GitHubOAuth")]
GitHubOAuth,
+ [EnumMember(Value = "GitLabOAuth")]
+ GitLabOAuth,
[EnumMember(Value = "GoogleOAuth")]
GoogleOAuth,
+ [EnumMember(Value = "IntuitOAuth")]
+ IntuitOAuth,
+ [EnumMember(Value = "LinkedInOAuth")]
+ LinkedInOAuth,
[EnumMember(Value = "MicrosoftOAuth")]
MicrosoftOAuth,
+ [EnumMember(Value = "SalesforceOAuth")]
+ SalesforceOAuth,
+ [EnumMember(Value = "SlackOAuth")]
+ SlackOAuth,
+ [EnumMember(Value = "VercelMarketplaceOAuth")]
+ VercelMarketplaceOAuth,
+ [EnumMember(Value = "VercelOAuth")]
+ VercelOAuth,
+ [EnumMember(Value = "XeroOAuth")]
+ XeroOAuth,
}
}
diff --git a/src/WorkOS.net/Enums/UserManagementAuthenticationProvider.cs b/src/WorkOS.net/Enums/UserManagementAuthenticationProvider.cs
index a10f8be2..b886d0a3 100644
--- a/src/WorkOS.net/Enums/UserManagementAuthenticationProvider.cs
+++ b/src/WorkOS.net/Enums/UserManagementAuthenticationProvider.cs
@@ -18,11 +18,29 @@ public enum UserManagementAuthenticationProvider
Authkit,
[EnumMember(Value = "AppleOAuth")]
AppleOAuth,
+ [EnumMember(Value = "BitbucketOAuth")]
+ BitbucketOAuth,
[EnumMember(Value = "GitHubOAuth")]
GitHubOAuth,
+ [EnumMember(Value = "GitLabOAuth")]
+ GitLabOAuth,
[EnumMember(Value = "GoogleOAuth")]
GoogleOAuth,
+ [EnumMember(Value = "IntuitOAuth")]
+ IntuitOAuth,
+ [EnumMember(Value = "LinkedInOAuth")]
+ LinkedInOAuth,
[EnumMember(Value = "MicrosoftOAuth")]
MicrosoftOAuth,
+ [EnumMember(Value = "SalesforceOAuth")]
+ SalesforceOAuth,
+ [EnumMember(Value = "SlackOAuth")]
+ SlackOAuth,
+ [EnumMember(Value = "VercelMarketplaceOAuth")]
+ VercelMarketplaceOAuth,
+ [EnumMember(Value = "VercelOAuth")]
+ VercelOAuth,
+ [EnumMember(Value = "XeroOAuth")]
+ XeroOAuth,
}
}
diff --git a/src/WorkOS.net/Enums/WaitlistUserState.cs b/src/WorkOS.net/Enums/WaitlistUserState.cs
new file mode 100644
index 00000000..10cdd29f
--- /dev/null
+++ b/src/WorkOS.net/Enums/WaitlistUserState.cs
@@ -0,0 +1,24 @@
+// This file is auto-generated by oagen. Do not edit.
+
+namespace WorkOS
+{
+ using System.Runtime.Serialization;
+ using Newtonsoft.Json;
+ using STJS = System.Text.Json.Serialization;
+
+ /// Represents waitlist user state values.
+ [JsonConverter(typeof(WorkOSNewtonsoftStringEnumConverter))]
+ [STJS.JsonConverter(typeof(WorkOSStringEnumConverterFactory))]
+ public enum WaitlistUserState
+ {
+ [EnumMember(Value = "unknown")]
+ Unknown,
+
+ [EnumMember(Value = "pending")]
+ Pending,
+ [EnumMember(Value = "approved")]
+ Approved,
+ [EnumMember(Value = "denied")]
+ Denied,
+ }
+}
diff --git a/src/WorkOS.net/Services/AdminPortal/_interfaces/AdminPortalOptions.cs b/src/WorkOS.net/Services/AdminPortal/_interfaces/AdminPortalOptions.cs
index 21b61b5f..c01829b3 100644
--- a/src/WorkOS.net/Services/AdminPortal/_interfaces/AdminPortalOptions.cs
+++ b/src/WorkOS.net/Services/AdminPortal/_interfaces/AdminPortalOptions.cs
@@ -34,8 +34,8 @@ public class AdminPortalGenerateLinkOptions : BaseOptions
/// Options to configure the Admin Portal based on the intent.
public IntentOptions? IntentOptions { get; set; }
- /// The email addresses of the IT admins to grant access to the Admin Portal for the given organization. Accepts up to 20 emails.
- public List? AdminEmails { get; set; }
+ /// The email addresses of the IT contacts to grant access to the Admin Portal for the given organization. Accepts up to 20 emails.
+ public List? ItContactEmails { get; set; }
}
}
diff --git a/src/WorkOS.net/Services/Authorization/AuthorizationService.cs b/src/WorkOS.net/Services/Authorization/AuthorizationService.cs
index 603bd14c..be4bc53b 100644
--- a/src/WorkOS.net/Services/Authorization/AuthorizationService.cs
+++ b/src/WorkOS.net/Services/Authorization/AuthorizationService.cs
@@ -82,7 +82,7 @@ public virtual Task Check(string organizationMembershipId, A
/// Per-request configuration overrides.
/// Cancellation token.
/// A page of results.
- public virtual async Task> ListOrganizationMembershipResourcesAsync(string organizationMembershipId, AuthorizationListOrganizationMembershipResourcesOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ public virtual async Task> ListResourcesForMembershipAsync(string organizationMembershipId, AuthorizationListResourcesForMembershipOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
{
var request = new WorkOSRequest
{
@@ -115,19 +115,19 @@ public virtual async Task> ListOrganizationMem
return await this.Client.MakeAPIRequest>(request, cancellationToken);
}
- /// Compatibility wrapper for .
- public virtual Task> ListOrganizationMembershipResources(string organizationMembershipId, AuthorizationListOrganizationMembershipResourcesOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ /// Compatibility wrapper for .
+ public virtual Task> ListResourcesForMembership(string organizationMembershipId, AuthorizationListResourcesForMembershipOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
{
- return this.ListOrganizationMembershipResourcesAsync(organizationMembershipId, options, requestOptions, cancellationToken);
+ return this.ListResourcesForMembershipAsync(organizationMembershipId, options, requestOptions, cancellationToken);
}
- /// Auto-paging variant of . Yields individual items across all pages.
+ /// Auto-paging variant of . Yields individual items across all pages.
/// The ID of the organization membership.
/// Request options.
/// Per-request configuration overrides.
/// Cancellation token.
/// An async sequence of items.
- public virtual IAsyncEnumerable ListOrganizationMembershipResourcesAutoPagingAsync(string organizationMembershipId, AuthorizationListOrganizationMembershipResourcesOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ public virtual IAsyncEnumerable ListResourcesForMembershipAutoPagingAsync(string organizationMembershipId, AuthorizationListResourcesForMembershipOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
{
return this.ListAutoPagingAsync($"/authorization/organization_memberships/{Uri.EscapeDataString(organizationMembershipId)}/resources", options, requestOptions, cancellationToken);
}
@@ -142,25 +142,25 @@ public virtual IAsyncEnumerable ListOrganizationMembershi
/// Per-request configuration overrides.
/// Cancellation token.
/// A page of results.
- public virtual async Task> ListResourcePermissionsAsync(string organizationMembershipId, string resourceId, AuthorizationListResourcePermissionsOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ public virtual async Task> ListEffectivePermissionsAsync(string organizationMembershipId, string resourceId, AuthorizationListEffectivePermissionsOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
{
return await this.GetAsync>($"/authorization/organization_memberships/{Uri.EscapeDataString(organizationMembershipId)}/resources/{Uri.EscapeDataString(resourceId)}/permissions", options, requestOptions, cancellationToken);
}
- /// Compatibility wrapper for .
- public virtual Task> ListResourcePermissions(string organizationMembershipId, string resourceId, AuthorizationListResourcePermissionsOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ /// Compatibility wrapper for .
+ public virtual Task> ListEffectivePermissions(string organizationMembershipId, string resourceId, AuthorizationListEffectivePermissionsOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
{
- return this.ListResourcePermissionsAsync(organizationMembershipId, resourceId, options, requestOptions, cancellationToken);
+ return this.ListEffectivePermissionsAsync(organizationMembershipId, resourceId, options, requestOptions, cancellationToken);
}
- /// Auto-paging variant of . Yields individual items across all pages.
+ /// Auto-paging variant of . Yields individual items across all pages.
/// The ID of the organization membership.
/// The ID of the authorization resource.
/// Request options.
/// Per-request configuration overrides.
/// Cancellation token.
/// An async sequence of items.
- public virtual IAsyncEnumerable ListResourcePermissionsAutoPagingAsync(string organizationMembershipId, string resourceId, AuthorizationListResourcePermissionsOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ public virtual IAsyncEnumerable ListEffectivePermissionsAutoPagingAsync(string organizationMembershipId, string resourceId, AuthorizationListEffectivePermissionsOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
{
return this.ListAutoPagingAsync($"/authorization/organization_memberships/{Uri.EscapeDataString(organizationMembershipId)}/resources/{Uri.EscapeDataString(resourceId)}/permissions", options, requestOptions, cancellationToken);
}
@@ -209,24 +209,24 @@ public virtual IAsyncEnumerable ListEffectivePermission
/// Per-request configuration overrides.
/// Cancellation token.
/// A page of results.
- public virtual async Task> ListOrganizationMembershipRoleAssignmentsAsync(string organizationMembershipId, AuthorizationListOrganizationMembershipRoleAssignmentsOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ public virtual async Task> ListRoleAssignmentsAsync(string organizationMembershipId, AuthorizationListRoleAssignmentsOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
{
return await this.GetAsync>($"/authorization/organization_memberships/{Uri.EscapeDataString(organizationMembershipId)}/role_assignments", options, requestOptions, cancellationToken);
}
- /// Compatibility wrapper for .
- public virtual Task> ListOrganizationMembershipRoleAssignments(string organizationMembershipId, AuthorizationListOrganizationMembershipRoleAssignmentsOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ /// Compatibility wrapper for .
+ public virtual Task> ListRoleAssignments(string organizationMembershipId, AuthorizationListRoleAssignmentsOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
{
- return this.ListOrganizationMembershipRoleAssignmentsAsync(organizationMembershipId, options, requestOptions, cancellationToken);
+ return this.ListRoleAssignmentsAsync(organizationMembershipId, options, requestOptions, cancellationToken);
}
- /// Auto-paging variant of . Yields individual items across all pages.
+ /// Auto-paging variant of . Yields individual items across all pages.
/// The ID of the organization membership.
/// Request options.
/// Per-request configuration overrides.
/// Cancellation token.
/// An async sequence of items.
- public virtual IAsyncEnumerable ListOrganizationMembershipRoleAssignmentsAutoPagingAsync(string organizationMembershipId, AuthorizationListOrganizationMembershipRoleAssignmentsOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ public virtual IAsyncEnumerable ListRoleAssignmentsAutoPagingAsync(string organizationMembershipId, AuthorizationListRoleAssignmentsOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
{
return this.ListAutoPagingAsync($"/authorization/organization_memberships/{Uri.EscapeDataString(organizationMembershipId)}/role_assignments", options, requestOptions, cancellationToken);
}
@@ -334,15 +334,15 @@ public virtual Task RemoveRole(string organizationMembershipId, AuthorizationRem
/// The ID of the role assignment to remove.
/// Per-request configuration overrides.
/// Cancellation token.
- public virtual async Task DeleteOrganizationMembershipRoleAssignmentAsync(string organizationMembershipId, string roleAssignmentId, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ public virtual async Task RemoveRoleAssignmentAsync(string organizationMembershipId, string roleAssignmentId, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
{
await this.DeleteAsync($"/authorization/organization_memberships/{Uri.EscapeDataString(organizationMembershipId)}/role_assignments/{Uri.EscapeDataString(roleAssignmentId)}", null, requestOptions, cancellationToken);
}
- /// Compatibility wrapper for .
- public virtual Task DeleteOrganizationMembershipRoleAssignment(string organizationMembershipId, string roleAssignmentId, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ /// Compatibility wrapper for .
+ public virtual Task RemoveRoleAssignment(string organizationMembershipId, string roleAssignmentId, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
{
- return this.DeleteOrganizationMembershipRoleAssignmentAsync(organizationMembershipId, roleAssignmentId, requestOptions, cancellationToken);
+ return this.RemoveRoleAssignmentAsync(organizationMembershipId, roleAssignmentId, requestOptions, cancellationToken);
}
/// List custom roles
@@ -454,15 +454,15 @@ public virtual Task DeleteOrganizationRole(string organizationId, string slug, R
/// Per-request configuration overrides.
/// Cancellation token.
/// The result.
- public virtual async Task CreateRolePermissionAsync(string organizationId, string slug, AuthorizationCreateRolePermissionOptions options, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ public virtual async Task AddOrganizationRolePermissionAsync(string organizationId, string slug, AuthorizationAddOrganizationRolePermissionOptions options, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
{
return await this.PostAsync($"/authorization/organizations/{Uri.EscapeDataString(organizationId)}/roles/{Uri.EscapeDataString(slug)}/permissions", options, requestOptions, cancellationToken);
}
- /// Compatibility wrapper for .
- public virtual Task CreateRolePermission(string organizationId, string slug, AuthorizationCreateRolePermissionOptions options, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ /// Compatibility wrapper for .
+ public virtual Task AddOrganizationRolePermission(string organizationId, string slug, AuthorizationAddOrganizationRolePermissionOptions options, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
{
- return this.CreateRolePermissionAsync(organizationId, slug, options, requestOptions, cancellationToken);
+ return this.AddOrganizationRolePermissionAsync(organizationId, slug, options, requestOptions, cancellationToken);
}
/// Set permissions for a custom role
@@ -475,15 +475,15 @@ public virtual Task CreateRolePermission(string organizationId, string slu
/// Per-request configuration overrides.
/// Cancellation token.
/// The result.
- public virtual async Task UpdateRolePermissionsAsync(string organizationId, string slug, AuthorizationUpdateRolePermissionsOptions options, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ public virtual async Task SetOrganizationRolePermissionsAsync(string organizationId, string slug, AuthorizationSetOrganizationRolePermissionsOptions options, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
{
return await this.PutAsync($"/authorization/organizations/{Uri.EscapeDataString(organizationId)}/roles/{Uri.EscapeDataString(slug)}/permissions", options, requestOptions, cancellationToken);
}
- /// Compatibility wrapper for .
- public virtual Task UpdateRolePermissions(string organizationId, string slug, AuthorizationUpdateRolePermissionsOptions options, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ /// Compatibility wrapper for .
+ public virtual Task SetOrganizationRolePermissions(string organizationId, string slug, AuthorizationSetOrganizationRolePermissionsOptions options, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
{
- return this.UpdateRolePermissionsAsync(organizationId, slug, options, requestOptions, cancellationToken);
+ return this.SetOrganizationRolePermissionsAsync(organizationId, slug, options, requestOptions, cancellationToken);
}
/// Remove a permission from a custom role
@@ -495,15 +495,15 @@ public virtual Task UpdateRolePermissions(string organizationId, string sl
/// The slug of the permission to remove.
/// Per-request configuration overrides.
/// Cancellation token.
- public virtual async Task DeleteRolePermissionAsync(string organizationId, string slug, string permissionSlug, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ public virtual async Task RemoveOrganizationRolePermissionAsync(string organizationId, string slug, string permissionSlug, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
{
await this.DeleteAsync($"/authorization/organizations/{Uri.EscapeDataString(organizationId)}/roles/{Uri.EscapeDataString(slug)}/permissions/{Uri.EscapeDataString(permissionSlug)}", null, requestOptions, cancellationToken);
}
- /// Compatibility wrapper for .
- public virtual Task DeleteRolePermission(string organizationId, string slug, string permissionSlug, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ /// Compatibility wrapper for .
+ public virtual Task RemoveOrganizationRolePermission(string organizationId, string slug, string permissionSlug, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
{
- return this.DeleteRolePermissionAsync(organizationId, slug, permissionSlug, requestOptions, cancellationToken);
+ return this.RemoveOrganizationRolePermissionAsync(organizationId, slug, permissionSlug, requestOptions, cancellationToken);
}
/// Get a resource by external ID
@@ -516,15 +516,15 @@ public virtual Task DeleteRolePermission(string organizationId, string slug, str
/// Per-request configuration overrides.
/// Cancellation token.
/// The result.
- public virtual async Task GetOrganizationResourceAsync(string organizationId, string resourceTypeSlug, string externalId, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ public virtual async Task GetResourceByExternalIdAsync(string organizationId, string resourceTypeSlug, string externalId, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
{
return await this.GetAsync($"/authorization/organizations/{Uri.EscapeDataString(organizationId)}/resources/{Uri.EscapeDataString(resourceTypeSlug)}/{Uri.EscapeDataString(externalId)}", null, requestOptions, cancellationToken);
}
- /// Compatibility wrapper for .
- public virtual Task GetOrganizationResource(string organizationId, string resourceTypeSlug, string externalId, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ /// Compatibility wrapper for .
+ public virtual Task GetResourceByExternalId(string organizationId, string resourceTypeSlug, string externalId, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
{
- return this.GetOrganizationResourceAsync(organizationId, resourceTypeSlug, externalId, requestOptions, cancellationToken);
+ return this.GetResourceByExternalIdAsync(organizationId, resourceTypeSlug, externalId, requestOptions, cancellationToken);
}
/// Update a resource by external ID
@@ -538,7 +538,7 @@ public virtual Task GetOrganizationResource(string organi
/// Per-request configuration overrides.
/// Cancellation token.
/// The result.
- public virtual async Task UpdateOrganizationResourceAsync(string organizationId, string resourceTypeSlug, string externalId, AuthorizationUpdateOrganizationResourceOptions options, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ public virtual async Task UpdateResourceByExternalIdAsync(string organizationId, string resourceTypeSlug, string externalId, AuthorizationUpdateResourceByExternalIdOptions options, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
{
var request = new WorkOSRequest
{
@@ -571,10 +571,10 @@ public virtual async Task UpdateOrganizationResourceAsync
return await this.Client.MakeAPIRequest(request, cancellationToken);
}
- /// Compatibility wrapper for .
- public virtual Task UpdateOrganizationResource(string organizationId, string resourceTypeSlug, string externalId, AuthorizationUpdateOrganizationResourceOptions options, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ /// Compatibility wrapper for .
+ public virtual Task UpdateResourceByExternalId(string organizationId, string resourceTypeSlug, string externalId, AuthorizationUpdateResourceByExternalIdOptions options, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
{
- return this.UpdateOrganizationResourceAsync(organizationId, resourceTypeSlug, externalId, options, requestOptions, cancellationToken);
+ return this.UpdateResourceByExternalIdAsync(organizationId, resourceTypeSlug, externalId, options, requestOptions, cancellationToken);
}
/// Delete an authorization resource by external ID
@@ -587,15 +587,15 @@ public virtual Task UpdateOrganizationResource(string org
/// Request options.
/// Per-request configuration overrides.
/// Cancellation token.
- public virtual async Task DeleteOrganizationResourceAsync(string organizationId, string resourceTypeSlug, string externalId, AuthorizationDeleteOrganizationResourceOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ public virtual async Task DeleteResourceByExternalIdAsync(string organizationId, string resourceTypeSlug, string externalId, AuthorizationDeleteResourceByExternalIdOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
{
await this.DeleteAsync($"/authorization/organizations/{Uri.EscapeDataString(organizationId)}/resources/{Uri.EscapeDataString(resourceTypeSlug)}/{Uri.EscapeDataString(externalId)}", options, requestOptions, cancellationToken);
}
- /// Compatibility wrapper for .
- public virtual Task DeleteOrganizationResource(string organizationId, string resourceTypeSlug, string externalId, AuthorizationDeleteOrganizationResourceOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ /// Compatibility wrapper for .
+ public virtual Task DeleteResourceByExternalId(string organizationId, string resourceTypeSlug, string externalId, AuthorizationDeleteResourceByExternalIdOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
{
- return this.DeleteOrganizationResourceAsync(organizationId, resourceTypeSlug, externalId, options, requestOptions, cancellationToken);
+ return this.DeleteResourceByExternalIdAsync(organizationId, resourceTypeSlug, externalId, options, requestOptions, cancellationToken);
}
/// List memberships for a resource by external ID
@@ -609,18 +609,18 @@ public virtual Task DeleteOrganizationResource(string organizationId, string res
/// Per-request configuration overrides.
/// Cancellation token.
/// A page of results.
- public virtual async Task> ListResourceOrganizationMembershipsAsync(string organizationId, string resourceTypeSlug, string externalId, AuthorizationListResourceOrganizationMembershipsOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ public virtual async Task> ListMembershipsForResourceByExternalIdAsync(string organizationId, string resourceTypeSlug, string externalId, AuthorizationListMembershipsForResourceByExternalIdOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
{
return await this.GetAsync>($"/authorization/organizations/{Uri.EscapeDataString(organizationId)}/resources/{Uri.EscapeDataString(resourceTypeSlug)}/{Uri.EscapeDataString(externalId)}/organization_memberships", options, requestOptions, cancellationToken);
}
- /// Compatibility wrapper for .
- public virtual Task> ListResourceOrganizationMemberships(string organizationId, string resourceTypeSlug, string externalId, AuthorizationListResourceOrganizationMembershipsOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ /// Compatibility wrapper for .
+ public virtual Task> ListMembershipsForResourceByExternalId(string organizationId, string resourceTypeSlug, string externalId, AuthorizationListMembershipsForResourceByExternalIdOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
{
- return this.ListResourceOrganizationMembershipsAsync(organizationId, resourceTypeSlug, externalId, options, requestOptions, cancellationToken);
+ return this.ListMembershipsForResourceByExternalIdAsync(organizationId, resourceTypeSlug, externalId, options, requestOptions, cancellationToken);
}
- /// Auto-paging variant of . Yields individual items across all pages.
+ /// Auto-paging variant of . Yields individual items across all pages.
/// The ID of the organization that owns the resource.
/// The slug of the resource type this resource belongs to.
/// An identifier you provide to reference the resource in your system.
@@ -628,7 +628,7 @@ public virtual Task> ListReso
/// Per-request configuration overrides.
/// Cancellation token.
/// An async sequence of items.
- public virtual IAsyncEnumerable ListResourceOrganizationMembershipsAutoPagingAsync(string organizationId, string resourceTypeSlug, string externalId, AuthorizationListResourceOrganizationMembershipsOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ public virtual IAsyncEnumerable ListMembershipsForResourceByExternalIdAutoPagingAsync(string organizationId, string resourceTypeSlug, string externalId, AuthorizationListMembershipsForResourceByExternalIdOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
{
return this.ListAutoPagingAsync($"/authorization/organizations/{Uri.EscapeDataString(organizationId)}/resources/{Uri.EscapeDataString(resourceTypeSlug)}/{Uri.EscapeDataString(externalId)}/organization_memberships", options, requestOptions, cancellationToken);
}
diff --git a/src/WorkOS.net/Services/Authorization/_interfaces/AuthorizationOptions.cs b/src/WorkOS.net/Services/Authorization/_interfaces/AuthorizationOptions.cs
index 3b24cc0d..baafb8e9 100644
--- a/src/WorkOS.net/Services/Authorization/_interfaces/AuthorizationOptions.cs
+++ b/src/WorkOS.net/Services/Authorization/_interfaces/AuthorizationOptions.cs
@@ -35,8 +35,8 @@ public class AuthorizationResourceTargetByExternalId : AuthorizationResourceTarg
}
- /// Request options for : List resources for organization membership
- public class AuthorizationListOrganizationMembershipResourcesOptions : ListOptions
+ /// Request options for : List resources for organization membership
+ public class AuthorizationListResourcesForMembershipOptions : ListOptions
{
/// The permission slug to filter by. Only child resources where the organization membership has this permission are returned.
public string PermissionSlug { get; set; } = default!;
@@ -63,8 +63,8 @@ public class AuthorizationParentResourceByExternalId : AuthorizationParentResour
}
- /// Request options for : List effective permissions for an organization membership on a resource
- public class AuthorizationListResourcePermissionsOptions : ListOptions
+ /// Request options for : List effective permissions for an organization membership on a resource
+ public class AuthorizationListEffectivePermissionsOptions : ListOptions
{
}
@@ -73,8 +73,8 @@ public class AuthorizationListEffectivePermissionsByExternalIdOptions : ListOpti
{
}
- /// Request options for : List role assignments
- public class AuthorizationListOrganizationMembershipRoleAssignmentsOptions : ListOptions
+ /// Request options for : List role assignments
+ public class AuthorizationListRoleAssignmentsOptions : ListOptions
{
}
@@ -130,24 +130,24 @@ public class AuthorizationUpdateOrganizationRoleOptions : BaseOptions
}
- /// Request options for : Add a permission to a custom role
- public class AuthorizationCreateRolePermissionOptions : BaseOptions
+ /// Request options for : Add a permission to a custom role
+ public class AuthorizationAddOrganizationRolePermissionOptions : BaseOptions
{
/// The slug of the permission to add to the role.
public string Slug { get; set; } = default!;
}
- /// Request options for : Set permissions for a custom role
- public class AuthorizationUpdateRolePermissionsOptions : BaseOptions
+ /// Request options for : Set permissions for a custom role
+ public class AuthorizationSetOrganizationRolePermissionsOptions : BaseOptions
{
/// The permission slugs to assign to the role.
public List Permissions { get; set; } = default!;
}
- /// Request options for : Update a resource by external ID
- public class AuthorizationUpdateOrganizationResourceOptions : BaseOptions
+ /// Request options for : Update a resource by external ID
+ public class AuthorizationUpdateResourceByExternalIdOptions : BaseOptions
{
/// A display name for the resource.
public string? Name { get; set; }
@@ -161,16 +161,16 @@ public class AuthorizationUpdateOrganizationResourceOptions : BaseOptions
}
- /// Request options for : Delete an authorization resource by external ID
- public class AuthorizationDeleteOrganizationResourceOptions : BaseOptions
+ /// Request options for : Delete an authorization resource by external ID
+ public class AuthorizationDeleteResourceByExternalIdOptions : BaseOptions
{
/// If true, deletes all descendant resources and role assignments. If not set and the resource has children or assignments, the request will fail.
public bool? CascadeDelete { get; set; }
}
- /// Request options for : List memberships for a resource by external ID
- public class AuthorizationListResourceOrganizationMembershipsOptions : ListOptions
+ /// Request options for : List memberships for a resource by external ID
+ public class AuthorizationListMembershipsForResourceByExternalIdOptions : ListOptions
{
/// The permission slug to filter by. Only users with this permission on the resource are returned.
public string PermissionSlug { get; set; } = default!;
@@ -189,6 +189,9 @@ public class AuthorizationListResourcesOptions : ListOptions
/// Filter resources by resource type slug.
public string? ResourceTypeSlug { get; set; }
+ /// Filter resources by external ID.
+ public string? ResourceExternalId { get; set; }
+
/// Search resources by name.
public string? Search { get; set; }
diff --git a/src/WorkOS.net/Services/Groups/GroupsService.cs b/src/WorkOS.net/Services/Groups/GroupsService.cs
new file mode 100644
index 00000000..294bfd4d
--- /dev/null
+++ b/src/WorkOS.net/Services/Groups/GroupsService.cs
@@ -0,0 +1,212 @@
+// This file is auto-generated by oagen. Do not edit.
+
+namespace WorkOS
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Net.Http;
+ using System.Threading;
+ using System.Threading.Tasks;
+
+ /// Service that exposes the groups API operations on .
+ public class GroupsService : Service
+ {
+ ///
+ /// Initializes a new instance of the class for mocking. The service uses the singleton
+ /// client configured via .
+ ///
+ public GroupsService() { }
+
+ ///
+ /// Initializes a new instance of the class bound to the
+ /// supplied .
+ ///
+ /// The HTTP client used to make API requests.
+ public GroupsService(WorkOSClient client) : base(client) { }
+
+ /// List groups
+ ///
+ /// Get a paginated list of groups within an organization.
+ ///
+ /// The ID of the organization.
+ /// Request options.
+ /// Per-request configuration overrides.
+ /// Cancellation token.
+ /// A page of results.
+ public virtual async Task> ListOrganizationGroupsAsync(string organizationId, GroupsListOrganizationGroupsOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ {
+ return await this.GetAsync>($"/organizations/{Uri.EscapeDataString(organizationId)}/groups", options, requestOptions, cancellationToken);
+ }
+
+ /// Compatibility wrapper for .
+ public virtual Task> ListOrganizationGroups(string organizationId, GroupsListOrganizationGroupsOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ {
+ return this.ListOrganizationGroupsAsync(organizationId, options, requestOptions, cancellationToken);
+ }
+
+ /// Auto-paging variant of . Yields individual items across all pages.
+ /// The ID of the organization.
+ /// Request options.
+ /// Per-request configuration overrides.
+ /// Cancellation token.
+ /// An async sequence of items.
+ public virtual IAsyncEnumerable ListOrganizationGroupsAutoPagingAsync(string organizationId, GroupsListOrganizationGroupsOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ {
+ return this.ListAutoPagingAsync($"/organizations/{Uri.EscapeDataString(organizationId)}/groups", options, requestOptions, cancellationToken);
+ }
+
+ /// Create a group
+ ///
+ /// Create a new group within an organization.
+ ///
+ /// The ID of the organization.
+ /// Request options.
+ /// Per-request configuration overrides.
+ /// Cancellation token.
+ /// The result.
+ public virtual async Task CreateOrganizationGroupAsync(string organizationId, GroupsCreateOrganizationGroupOptions options, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ {
+ return await this.PostAsync($"/organizations/{Uri.EscapeDataString(organizationId)}/groups", options, requestOptions, cancellationToken);
+ }
+
+ /// Compatibility wrapper for .
+ public virtual Task CreateOrganizationGroup(string organizationId, GroupsCreateOrganizationGroupOptions options, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ {
+ return this.CreateOrganizationGroupAsync(organizationId, options, requestOptions, cancellationToken);
+ }
+
+ /// Get a group
+ ///
+ /// Retrieve a group by its ID within an organization.
+ ///
+ /// The ID of the organization.
+ /// The ID of the group.
+ /// Per-request configuration overrides.
+ /// Cancellation token.
+ /// The result.
+ public virtual async Task GetOrganizationGroupAsync(string organizationId, string groupId, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ {
+ return await this.GetAsync($"/organizations/{Uri.EscapeDataString(organizationId)}/groups/{Uri.EscapeDataString(groupId)}", null, requestOptions, cancellationToken);
+ }
+
+ /// Compatibility wrapper for .
+ public virtual Task GetOrganizationGroup(string organizationId, string groupId, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ {
+ return this.GetOrganizationGroupAsync(organizationId, groupId, requestOptions, cancellationToken);
+ }
+
+ /// Update a group
+ ///
+ /// Update an existing group. Only the fields provided in the request body will be updated.
+ ///
+ /// The ID of the organization.
+ /// The ID of the group.
+ /// Request options.
+ /// Per-request configuration overrides.
+ /// Cancellation token.
+ /// The result.
+ public virtual async Task UpdateOrganizationGroupAsync(string organizationId, string groupId, GroupsUpdateOrganizationGroupOptions options, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ {
+ return await this.PatchAsync($"/organizations/{Uri.EscapeDataString(organizationId)}/groups/{Uri.EscapeDataString(groupId)}", options, requestOptions, cancellationToken);
+ }
+
+ /// Compatibility wrapper for .
+ public virtual Task UpdateOrganizationGroup(string organizationId, string groupId, GroupsUpdateOrganizationGroupOptions options, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ {
+ return this.UpdateOrganizationGroupAsync(organizationId, groupId, options, requestOptions, cancellationToken);
+ }
+
+ /// Delete a group
+ ///
+ /// Delete a group from an organization.
+ ///
+ /// The ID of the organization.
+ /// The ID of the group.
+ /// Per-request configuration overrides.
+ /// Cancellation token.
+ public virtual async Task DeleteOrganizationGroupAsync(string organizationId, string groupId, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ {
+ await this.DeleteAsync($"/organizations/{Uri.EscapeDataString(organizationId)}/groups/{Uri.EscapeDataString(groupId)}", null, requestOptions, cancellationToken);
+ }
+
+ /// Compatibility wrapper for .
+ public virtual Task DeleteOrganizationGroup(string organizationId, string groupId, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ {
+ return this.DeleteOrganizationGroupAsync(organizationId, groupId, requestOptions, cancellationToken);
+ }
+
+ /// List Group members
+ ///
+ /// Get a list of organization memberships in a group.
+ ///
+ /// Unique identifier of the Organization.
+ /// Unique identifier of the Group.
+ /// Request options.
+ /// Per-request configuration overrides.
+ /// Cancellation token.
+ /// A page of results.
+ public virtual async Task> ListOrganizationMembershipsAsync(string organizationId, string groupId, GroupsListOrganizationMembershipsOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ {
+ return await this.GetAsync>($"/organizations/{Uri.EscapeDataString(organizationId)}/groups/{Uri.EscapeDataString(groupId)}/organization-memberships", options, requestOptions, cancellationToken);
+ }
+
+ /// Compatibility wrapper for .
+ public virtual Task> ListOrganizationMemberships(string organizationId, string groupId, GroupsListOrganizationMembershipsOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ {
+ return this.ListOrganizationMembershipsAsync(organizationId, groupId, options, requestOptions, cancellationToken);
+ }
+
+ /// Auto-paging variant of . Yields individual items across all pages.
+ /// Unique identifier of the Organization.
+ /// Unique identifier of the Group.
+ /// Request options.
+ /// Per-request configuration overrides.
+ /// Cancellation token.
+ /// An async sequence of items.
+ public virtual IAsyncEnumerable ListOrganizationMembershipsAutoPagingAsync(string organizationId, string groupId, GroupsListOrganizationMembershipsOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ {
+ return this.ListAutoPagingAsync($"/organizations/{Uri.EscapeDataString(organizationId)}/groups/{Uri.EscapeDataString(groupId)}/organization-memberships", options, requestOptions, cancellationToken);
+ }
+
+ /// Add a member to a Group
+ ///
+ /// Add an organization membership to a group.
+ ///
+ /// Unique identifier of the Organization.
+ /// Unique identifier of the Group.
+ /// Request options.
+ /// Per-request configuration overrides.
+ /// Cancellation token.
+ /// The result.
+ public virtual async Task CreateOrganizationMembershipAsync(string organizationId, string groupId, GroupsCreateOrganizationMembershipOptions options, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ {
+ return await this.PostAsync($"/organizations/{Uri.EscapeDataString(organizationId)}/groups/{Uri.EscapeDataString(groupId)}/organization-memberships", options, requestOptions, cancellationToken);
+ }
+
+ /// Compatibility wrapper for .
+ public virtual Task CreateOrganizationMembership(string organizationId, string groupId, GroupsCreateOrganizationMembershipOptions options, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ {
+ return this.CreateOrganizationMembershipAsync(organizationId, groupId, options, requestOptions, cancellationToken);
+ }
+
+ /// Remove a member from a Group
+ ///
+ /// Remove an organization membership from a group.
+ ///
+ /// Unique identifier of the Organization.
+ /// Unique identifier of the Group.
+ /// Unique identifier of the Organization Membership.
+ /// Per-request configuration overrides.
+ /// Cancellation token.
+ public virtual async Task DeleteOrganizationMembershipAsync(string organizationId, string groupId, string omId, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ {
+ await this.DeleteAsync($"/organizations/{Uri.EscapeDataString(organizationId)}/groups/{Uri.EscapeDataString(groupId)}/organization-memberships/{Uri.EscapeDataString(omId)}", null, requestOptions, cancellationToken);
+ }
+
+ /// Compatibility wrapper for .
+ public virtual Task DeleteOrganizationMembership(string organizationId, string groupId, string omId, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ {
+ return this.DeleteOrganizationMembershipAsync(organizationId, groupId, omId, requestOptions, cancellationToken);
+ }
+ }
+}
diff --git a/src/WorkOS.net/Services/Groups/_interfaces/GroupsOptions.cs b/src/WorkOS.net/Services/Groups/_interfaces/GroupsOptions.cs
new file mode 100644
index 00000000..03a20d29
--- /dev/null
+++ b/src/WorkOS.net/Services/Groups/_interfaces/GroupsOptions.cs
@@ -0,0 +1,49 @@
+// This file is auto-generated by oagen. Do not edit.
+
+namespace WorkOS
+{
+ using System;
+ using System.Collections.Generic;
+ using Newtonsoft.Json;
+ using STJS = System.Text.Json.Serialization;
+
+ /// Request options for : List groups
+ public class GroupsListOrganizationGroupsOptions : ListOptions
+ {
+ }
+
+ /// Request options for : Create a group
+ public class GroupsCreateOrganizationGroupOptions : BaseOptions
+ {
+ /// The name of the Group.
+ public string Name { get; set; } = default!;
+
+ /// An optional description of the Group.
+ public string? Description { get; set; }
+
+ }
+
+ /// Request options for : Update a group
+ public class GroupsUpdateOrganizationGroupOptions : BaseOptions
+ {
+ /// The name of the Group.
+ public string? Name { get; set; }
+
+ /// An optional description of the Group.
+ public string? Description { get; set; }
+
+ }
+
+ /// Request options for : List Group members
+ public class GroupsListOrganizationMembershipsOptions : ListOptions
+ {
+ }
+
+ /// Request options for : Add a member to a Group
+ public class GroupsCreateOrganizationMembershipOptions : BaseOptions
+ {
+ /// The ID of the Organization Membership to add to the group.
+ public string OrganizationMembershipId { get; set; } = default!;
+
+ }
+}
diff --git a/src/WorkOS.net/Services/SSO/_interfaces/SSOOptions.cs b/src/WorkOS.net/Services/SSO/_interfaces/SSOOptions.cs
index 245be594..651f8051 100644
--- a/src/WorkOS.net/Services/SSO/_interfaces/SSOOptions.cs
+++ b/src/WorkOS.net/Services/SSO/_interfaces/SSOOptions.cs
@@ -37,7 +37,7 @@ public class SSOGetAuthorizationUrlOptions : BaseOptions
[System.Obsolete("Deprecated. Use `connection` or `organization` instead.")]
public string? Domain { get; set; }
- /// Used to initiate OAuth authentication with Google, Microsoft, GitHub, or Apple.
+ /// Used to initiate OAuth authentication with various providers.
public SSOProvider? Provider { get; set; }
/// Where to redirect the user after they complete the authentication process. You must use one of the redirect URIs configured via the [Redirects](https://dashboard.workos.com/redirects) page on the dashboard.
diff --git a/src/WorkOS.net/Services/UserManagementOrganizationMembershipGroups/UserManagementOrganizationMembershipGroupsService.cs b/src/WorkOS.net/Services/UserManagementOrganizationMembershipGroups/UserManagementOrganizationMembershipGroupsService.cs
new file mode 100644
index 00000000..bdfbcd6b
--- /dev/null
+++ b/src/WorkOS.net/Services/UserManagementOrganizationMembershipGroups/UserManagementOrganizationMembershipGroupsService.cs
@@ -0,0 +1,58 @@
+// This file is auto-generated by oagen. Do not edit.
+
+namespace WorkOS
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Net.Http;
+ using System.Threading;
+ using System.Threading.Tasks;
+
+ /// Service that exposes the user management organization membership groups API operations on .
+ public class UserManagementOrganizationMembershipGroupsService : Service
+ {
+ ///
+ /// Initializes a new instance of the class for mocking. The service uses the singleton
+ /// client configured via .
+ ///
+ public UserManagementOrganizationMembershipGroupsService() { }
+
+ ///
+ /// Initializes a new instance of the class bound to the
+ /// supplied .
+ ///
+ /// The HTTP client used to make API requests.
+ public UserManagementOrganizationMembershipGroupsService(WorkOSClient client) : base(client) { }
+
+ /// List groups
+ ///
+ /// Get a list of groups that an organization membership belongs to.
+ ///
+ /// Unique identifier of the Organization Membership.
+ /// Request options.
+ /// Per-request configuration overrides.
+ /// Cancellation token.
+ /// A page of results.
+ public virtual async Task> ListOrganizationMembershipGroupsAsync(string omId, UserManagementOrganizationMembershipGroupsListOrganizationMembershipGroupsOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ {
+ return await this.GetAsync>($"/user_management/organization_memberships/{Uri.EscapeDataString(omId)}/groups", options, requestOptions, cancellationToken);
+ }
+
+ /// Compatibility wrapper for .
+ public virtual Task> ListOrganizationMembershipGroups(string omId, UserManagementOrganizationMembershipGroupsListOrganizationMembershipGroupsOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ {
+ return this.ListOrganizationMembershipGroupsAsync(omId, options, requestOptions, cancellationToken);
+ }
+
+ /// Auto-paging variant of . Yields individual items across all pages.
+ /// Unique identifier of the Organization Membership.
+ /// Request options.
+ /// Per-request configuration overrides.
+ /// Cancellation token.
+ /// An async sequence of items.
+ public virtual IAsyncEnumerable ListOrganizationMembershipGroupsAutoPagingAsync(string omId, UserManagementOrganizationMembershipGroupsListOrganizationMembershipGroupsOptions? options = null, RequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
+ {
+ return this.ListAutoPagingAsync($"/user_management/organization_memberships/{Uri.EscapeDataString(omId)}/groups", options, requestOptions, cancellationToken);
+ }
+ }
+}
diff --git a/src/WorkOS.net/Services/UserManagementOrganizationMembershipGroups/_interfaces/UserManagementOrganizationMembershipGroupsOptions.cs b/src/WorkOS.net/Services/UserManagementOrganizationMembershipGroups/_interfaces/UserManagementOrganizationMembershipGroupsOptions.cs
new file mode 100644
index 00000000..94155c74
--- /dev/null
+++ b/src/WorkOS.net/Services/UserManagementOrganizationMembershipGroups/_interfaces/UserManagementOrganizationMembershipGroupsOptions.cs
@@ -0,0 +1,14 @@
+// This file is auto-generated by oagen. Do not edit.
+
+namespace WorkOS
+{
+ using System;
+ using System.Collections.Generic;
+ using Newtonsoft.Json;
+ using STJS = System.Text.Json.Serialization;
+
+ /// Request options for : List groups
+ public class UserManagementOrganizationMembershipGroupsListOrganizationMembershipGroupsOptions : ListOptions
+ {
+ }
+}
diff --git a/test/WorkOSTests/Tests/AuthorizationServiceTest.cs b/test/WorkOSTests/Tests/AuthorizationServiceTest.cs
index d86b6646..6c1db3de 100644
--- a/test/WorkOSTests/Tests/AuthorizationServiceTest.cs
+++ b/test/WorkOSTests/Tests/AuthorizationServiceTest.cs
@@ -40,41 +40,41 @@ public async Task TestCheckAsync()
}
[Fact]
- public async Task TestListOrganizationMembershipResourcesAsync()
+ public async Task TestListResourcesForMembershipAsync()
{
var fixture = System.IO.File.ReadAllText("testdata/list_authorization_resource.json");
this.httpMock.MockResponse(HttpMethod.Get, "/authorization/organization_memberships/test_organization_membership_id/resources", HttpStatusCode.OK, fixture);
- var result = await this.service.ListOrganizationMembershipResourcesAsync("test_organization_membership_id", new AuthorizationListOrganizationMembershipResourcesOptions());
+ var result = await this.service.ListResourcesForMembershipAsync("test_organization_membership_id", new AuthorizationListResourcesForMembershipOptions());
Assert.NotNull(result);
Assert.NotEmpty(result.Data);
this.httpMock.AssertRequestWasMade(HttpMethod.Get, "/authorization/organization_memberships/test_organization_membership_id/resources");
}
[Fact]
- public async Task TestListOrganizationMembershipResourcesAsyncEmpty()
+ public async Task TestListResourcesForMembershipAsyncEmpty()
{
this.httpMock.MockResponse(HttpMethod.Get, "/authorization/organization_memberships/test_organization_membership_id/resources", HttpStatusCode.OK, "{\"data\":[],\"list_metadata\":{\"before\":null,\"after\":null}}");
- var result = await this.service.ListOrganizationMembershipResourcesAsync("test_organization_membership_id", new AuthorizationListOrganizationMembershipResourcesOptions());
+ var result = await this.service.ListResourcesForMembershipAsync("test_organization_membership_id", new AuthorizationListResourcesForMembershipOptions());
Assert.NotNull(result);
Assert.Empty(result.Data);
}
[Fact]
- public async Task TestListResourcePermissionsAsync()
+ public async Task TestListEffectivePermissionsAsync()
{
var fixture = System.IO.File.ReadAllText("testdata/list_authorization_permission.json");
this.httpMock.MockResponse(HttpMethod.Get, "/authorization/organization_memberships/test_organization_membership_id/resources/test_resource_id/permissions", HttpStatusCode.OK, fixture);
- var result = await this.service.ListResourcePermissionsAsync("test_organization_membership_id", "test_resource_id", new AuthorizationListResourcePermissionsOptions());
+ var result = await this.service.ListEffectivePermissionsAsync("test_organization_membership_id", "test_resource_id", new AuthorizationListEffectivePermissionsOptions());
Assert.NotNull(result);
Assert.NotEmpty(result.Data);
this.httpMock.AssertRequestWasMade(HttpMethod.Get, "/authorization/organization_memberships/test_organization_membership_id/resources/test_resource_id/permissions");
}
[Fact]
- public async Task TestListResourcePermissionsAsyncEmpty()
+ public async Task TestListEffectivePermissionsAsyncEmpty()
{
this.httpMock.MockResponse(HttpMethod.Get, "/authorization/organization_memberships/test_organization_membership_id/resources/test_resource_id/permissions", HttpStatusCode.OK, "{\"data\":[],\"list_metadata\":{\"before\":null,\"after\":null}}");
- var result = await this.service.ListResourcePermissionsAsync("test_organization_membership_id", "test_resource_id", new AuthorizationListResourcePermissionsOptions());
+ var result = await this.service.ListEffectivePermissionsAsync("test_organization_membership_id", "test_resource_id", new AuthorizationListEffectivePermissionsOptions());
Assert.NotNull(result);
Assert.Empty(result.Data);
}
@@ -100,21 +100,21 @@ public async Task TestListEffectivePermissionsByExternalIdAsyncEmpty()
}
[Fact]
- public async Task TestListOrganizationMembershipRoleAssignmentsAsync()
+ public async Task TestListRoleAssignmentsAsync()
{
var fixture = System.IO.File.ReadAllText("testdata/list_role_assignment.json");
this.httpMock.MockResponse(HttpMethod.Get, "/authorization/organization_memberships/test_organization_membership_id/role_assignments", HttpStatusCode.OK, fixture);
- var result = await this.service.ListOrganizationMembershipRoleAssignmentsAsync("test_organization_membership_id", new AuthorizationListOrganizationMembershipRoleAssignmentsOptions());
+ var result = await this.service.ListRoleAssignmentsAsync("test_organization_membership_id", new AuthorizationListRoleAssignmentsOptions());
Assert.NotNull(result);
Assert.NotEmpty(result.Data);
this.httpMock.AssertRequestWasMade(HttpMethod.Get, "/authorization/organization_memberships/test_organization_membership_id/role_assignments");
}
[Fact]
- public async Task TestListOrganizationMembershipRoleAssignmentsAsyncEmpty()
+ public async Task TestListRoleAssignmentsAsyncEmpty()
{
this.httpMock.MockResponse(HttpMethod.Get, "/authorization/organization_memberships/test_organization_membership_id/role_assignments", HttpStatusCode.OK, "{\"data\":[],\"list_metadata\":{\"before\":null,\"after\":null}}");
- var result = await this.service.ListOrganizationMembershipRoleAssignmentsAsync("test_organization_membership_id", new AuthorizationListOrganizationMembershipRoleAssignmentsOptions());
+ var result = await this.service.ListRoleAssignmentsAsync("test_organization_membership_id", new AuthorizationListRoleAssignmentsOptions());
Assert.NotNull(result);
Assert.Empty(result.Data);
}
@@ -142,10 +142,10 @@ public async Task TestRemoveRoleAsync()
}
[Fact]
- public async Task TestDeleteOrganizationMembershipRoleAssignmentAsync()
+ public async Task TestRemoveRoleAssignmentAsync()
{
this.httpMock.MockResponse(HttpMethod.Delete, "/authorization/organization_memberships/test_organization_membership_id/role_assignments/test_role_assignment_id", HttpStatusCode.NoContent, "");
- await this.service.DeleteOrganizationMembershipRoleAssignmentAsync("test_organization_membership_id", "test_role_assignment_id");
+ await this.service.RemoveRoleAssignmentAsync("test_organization_membership_id", "test_role_assignment_id");
this.httpMock.AssertRequestWasMade(HttpMethod.Delete, "/authorization/organization_memberships/test_organization_membership_id/role_assignments/test_role_assignment_id");
}
@@ -210,13 +210,13 @@ public async Task TestDeleteOrganizationRoleAsync()
}
[Fact]
- public async Task TestCreateRolePermissionAsync()
+ public async Task TestAddOrganizationRolePermissionAsync()
{
var fixture = System.IO.File.ReadAllText("testdata/role.json");
this.httpMock.MockResponse(HttpMethod.Post, "/authorization/organizations/test_organizationId/roles/test_slug/permissions", HttpStatusCode.OK, fixture);
- var options = new AuthorizationCreateRolePermissionOptions();
+ var options = new AuthorizationAddOrganizationRolePermissionOptions();
options.Slug = "test_slug";
- var result = await this.service.CreateRolePermissionAsync("test_organizationId", "test_slug", options);
+ var result = await this.service.AddOrganizationRolePermissionAsync("test_organizationId", "test_slug", options);
Assert.NotNull(result);
Assert.Equal("role_01EHQMYV6MBK39QC5PZXHY59C3", result.Id);
Assert.Equal("admin", result.Slug);
@@ -226,11 +226,11 @@ public async Task TestCreateRolePermissionAsync()
}
[Fact]
- public async Task TestUpdateRolePermissionsAsync()
+ public async Task TestSetOrganizationRolePermissionsAsync()
{
var fixture = System.IO.File.ReadAllText("testdata/role.json");
this.httpMock.MockResponse(HttpMethod.Put, "/authorization/organizations/test_organizationId/roles/test_slug/permissions", HttpStatusCode.OK, fixture);
- var result = await this.service.UpdateRolePermissionsAsync("test_organizationId", "test_slug", new AuthorizationUpdateRolePermissionsOptions());
+ var result = await this.service.SetOrganizationRolePermissionsAsync("test_organizationId", "test_slug", new AuthorizationSetOrganizationRolePermissionsOptions());
Assert.NotNull(result);
Assert.Equal("role_01EHQMYV6MBK39QC5PZXHY59C3", result.Id);
Assert.Equal("admin", result.Slug);
@@ -239,19 +239,19 @@ public async Task TestUpdateRolePermissionsAsync()
}
[Fact]
- public async Task TestDeleteRolePermissionAsync()
+ public async Task TestRemoveOrganizationRolePermissionAsync()
{
this.httpMock.MockResponse(HttpMethod.Delete, "/authorization/organizations/test_organizationId/roles/test_slug/permissions/test_permissionSlug", HttpStatusCode.NoContent, "");
- await this.service.DeleteRolePermissionAsync("test_organizationId", "test_slug", "test_permissionSlug");
+ await this.service.RemoveOrganizationRolePermissionAsync("test_organizationId", "test_slug", "test_permissionSlug");
this.httpMock.AssertRequestWasMade(HttpMethod.Delete, "/authorization/organizations/test_organizationId/roles/test_slug/permissions/test_permissionSlug");
}
[Fact]
- public async Task TestGetOrganizationResourceAsync()
+ public async Task TestGetResourceByExternalIdAsync()
{
var fixture = System.IO.File.ReadAllText("testdata/authorization_resource.json");
this.httpMock.MockResponse(HttpMethod.Get, "/authorization/organizations/test_organization_id/resources/test_resource_type_slug/test_external_id", HttpStatusCode.OK, fixture);
- var result = await this.service.GetOrganizationResourceAsync("test_organization_id", "test_resource_type_slug", "test_external_id");
+ var result = await this.service.GetResourceByExternalIdAsync("test_organization_id", "test_resource_type_slug", "test_external_id");
Assert.NotNull(result);
Assert.Equal("authz_resource_01HXYZ123456789ABCDEFGH", result.Id);
Assert.Equal("Website Redesign", result.Name);
@@ -260,11 +260,11 @@ public async Task TestGetOrganizationResourceAsync()
}
[Fact]
- public async Task TestUpdateOrganizationResourceAsync()
+ public async Task TestUpdateResourceByExternalIdAsync()
{
var fixture = System.IO.File.ReadAllText("testdata/authorization_resource.json");
this.httpMock.MockResponse(HttpMethod.Patch, "/authorization/organizations/test_organization_id/resources/test_resource_type_slug/test_external_id", HttpStatusCode.OK, fixture);
- var result = await this.service.UpdateOrganizationResourceAsync("test_organization_id", "test_resource_type_slug", "test_external_id", new AuthorizationUpdateOrganizationResourceOptions());
+ var result = await this.service.UpdateResourceByExternalIdAsync("test_organization_id", "test_resource_type_slug", "test_external_id", new AuthorizationUpdateResourceByExternalIdOptions());
Assert.NotNull(result);
Assert.Equal("authz_resource_01HXYZ123456789ABCDEFGH", result.Id);
Assert.Equal("Website Redesign", result.Name);
@@ -273,29 +273,29 @@ public async Task TestUpdateOrganizationResourceAsync()
}
[Fact]
- public async Task TestDeleteOrganizationResourceAsync()
+ public async Task TestDeleteResourceByExternalIdAsync()
{
this.httpMock.MockResponse(HttpMethod.Delete, "/authorization/organizations/test_organization_id/resources/test_resource_type_slug/test_external_id", HttpStatusCode.NoContent, "");
- await this.service.DeleteOrganizationResourceAsync("test_organization_id", "test_resource_type_slug", "test_external_id", new AuthorizationDeleteOrganizationResourceOptions());
+ await this.service.DeleteResourceByExternalIdAsync("test_organization_id", "test_resource_type_slug", "test_external_id", new AuthorizationDeleteResourceByExternalIdOptions());
this.httpMock.AssertRequestWasMade(HttpMethod.Delete, "/authorization/organizations/test_organization_id/resources/test_resource_type_slug/test_external_id");
}
[Fact]
- public async Task TestListResourceOrganizationMembershipsAsync()
+ public async Task TestListMembershipsForResourceByExternalIdAsync()
{
var fixture = System.IO.File.ReadAllText("testdata/list_user_organization_membership_base_list_data.json");
this.httpMock.MockResponse(HttpMethod.Get, "/authorization/organizations/test_organization_id/resources/test_resource_type_slug/test_external_id/organization_memberships", HttpStatusCode.OK, fixture);
- var result = await this.service.ListResourceOrganizationMembershipsAsync("test_organization_id", "test_resource_type_slug", "test_external_id", new AuthorizationListResourceOrganizationMembershipsOptions());
+ var result = await this.service.ListMembershipsForResourceByExternalIdAsync("test_organization_id", "test_resource_type_slug", "test_external_id", new AuthorizationListMembershipsForResourceByExternalIdOptions());
Assert.NotNull(result);
Assert.NotEmpty(result.Data);
this.httpMock.AssertRequestWasMade(HttpMethod.Get, "/authorization/organizations/test_organization_id/resources/test_resource_type_slug/test_external_id/organization_memberships");
}
[Fact]
- public async Task TestListResourceOrganizationMembershipsAsyncEmpty()
+ public async Task TestListMembershipsForResourceByExternalIdAsyncEmpty()
{
this.httpMock.MockResponse(HttpMethod.Get, "/authorization/organizations/test_organization_id/resources/test_resource_type_slug/test_external_id/organization_memberships", HttpStatusCode.OK, "{\"data\":[],\"list_metadata\":{\"before\":null,\"after\":null}}");
- var result = await this.service.ListResourceOrganizationMembershipsAsync("test_organization_id", "test_resource_type_slug", "test_external_id", new AuthorizationListResourceOrganizationMembershipsOptions());
+ var result = await this.service.ListMembershipsForResourceByExternalIdAsync("test_organization_id", "test_resource_type_slug", "test_external_id", new AuthorizationListMembershipsForResourceByExternalIdOptions());
Assert.NotNull(result);
Assert.Empty(result.Data);
}
@@ -548,7 +548,7 @@ public async Task TestDeletePermissionAsync()
}
[Fact]
- public async Task TestListOrganizationMembershipResourcesAutoPagingAsync()
+ public async Task TestListResourcesForMembershipAutoPagingAsync()
{
var fixture = System.IO.File.ReadAllText("testdata/authorization_resource.json");
var page1 = "{\"data\":[" + fixture + "],\"list_metadata\":{\"before\":null,\"after\":\"cursor_123\"}}";
@@ -556,7 +556,7 @@ public async Task TestListOrganizationMembershipResourcesAutoPagingAsync()
this.httpMock.MockSequentialResponses(HttpMethod.Get, "/authorization/organization_memberships/test_organization_membership_id/resources", HttpStatusCode.OK, new[] { page1, page2 });
var items = new List();
- await foreach (var item in this.service.ListOrganizationMembershipResourcesAutoPagingAsync("test_organization_membership_id", new AuthorizationListOrganizationMembershipResourcesOptions()))
+ await foreach (var item in this.service.ListResourcesForMembershipAutoPagingAsync("test_organization_membership_id", new AuthorizationListResourcesForMembershipOptions()))
{
items.Add(item);
}
@@ -565,13 +565,13 @@ public async Task TestListOrganizationMembershipResourcesAutoPagingAsync()
}
[Fact]
- public async Task TestListOrganizationMembershipResourcesAutoPagingAsyncEmpty()
+ public async Task TestListResourcesForMembershipAutoPagingAsyncEmpty()
{
var empty = "{\"data\":[],\"list_metadata\":{\"before\":null,\"after\":null}}";
this.httpMock.MockSequentialResponses(HttpMethod.Get, "/authorization/organization_memberships/test_organization_membership_id/resources", HttpStatusCode.OK, new[] { empty });
var items = new List();
- await foreach (var item in this.service.ListOrganizationMembershipResourcesAutoPagingAsync("test_organization_membership_id", new AuthorizationListOrganizationMembershipResourcesOptions()))
+ await foreach (var item in this.service.ListResourcesForMembershipAutoPagingAsync("test_organization_membership_id", new AuthorizationListResourcesForMembershipOptions()))
{
items.Add(item);
}
@@ -580,7 +580,7 @@ public async Task TestListOrganizationMembershipResourcesAutoPagingAsyncEmpty()
}
[Fact]
- public async Task TestListResourcePermissionsAutoPagingAsync()
+ public async Task TestListEffectivePermissionsAutoPagingAsync()
{
var fixture = System.IO.File.ReadAllText("testdata/authorization_permission.json");
var page1 = "{\"data\":[" + fixture + "],\"list_metadata\":{\"before\":null,\"after\":\"cursor_123\"}}";
@@ -588,7 +588,7 @@ public async Task TestListResourcePermissionsAutoPagingAsync()
this.httpMock.MockSequentialResponses(HttpMethod.Get, "/authorization/organization_memberships/test_organization_membership_id/resources/test_resource_id/permissions", HttpStatusCode.OK, new[] { page1, page2 });
var items = new List();
- await foreach (var item in this.service.ListResourcePermissionsAutoPagingAsync("test_organization_membership_id", "test_resource_id", new AuthorizationListResourcePermissionsOptions()))
+ await foreach (var item in this.service.ListEffectivePermissionsAutoPagingAsync("test_organization_membership_id", "test_resource_id", new AuthorizationListEffectivePermissionsOptions()))
{
items.Add(item);
}
@@ -597,13 +597,13 @@ public async Task TestListResourcePermissionsAutoPagingAsync()
}
[Fact]
- public async Task TestListResourcePermissionsAutoPagingAsyncEmpty()
+ public async Task TestListEffectivePermissionsAutoPagingAsyncEmpty()
{
var empty = "{\"data\":[],\"list_metadata\":{\"before\":null,\"after\":null}}";
this.httpMock.MockSequentialResponses(HttpMethod.Get, "/authorization/organization_memberships/test_organization_membership_id/resources/test_resource_id/permissions", HttpStatusCode.OK, new[] { empty });
var items = new List();
- await foreach (var item in this.service.ListResourcePermissionsAutoPagingAsync("test_organization_membership_id", "test_resource_id", new AuthorizationListResourcePermissionsOptions()))
+ await foreach (var item in this.service.ListEffectivePermissionsAutoPagingAsync("test_organization_membership_id", "test_resource_id", new AuthorizationListEffectivePermissionsOptions()))
{
items.Add(item);
}
@@ -644,7 +644,7 @@ public async Task TestListEffectivePermissionsByExternalIdAutoPagingAsyncEmpty()
}
[Fact]
- public async Task TestListOrganizationMembershipRoleAssignmentsAutoPagingAsync()
+ public async Task TestListRoleAssignmentsAutoPagingAsync()
{
var fixture = System.IO.File.ReadAllText("testdata/role_assignment.json");
var page1 = "{\"data\":[" + fixture + "],\"list_metadata\":{\"before\":null,\"after\":\"cursor_123\"}}";
@@ -652,7 +652,7 @@ public async Task TestListOrganizationMembershipRoleAssignmentsAutoPagingAsync()
this.httpMock.MockSequentialResponses(HttpMethod.Get, "/authorization/organization_memberships/test_organization_membership_id/role_assignments", HttpStatusCode.OK, new[] { page1, page2 });
var items = new List();
- await foreach (var item in this.service.ListOrganizationMembershipRoleAssignmentsAutoPagingAsync("test_organization_membership_id", new AuthorizationListOrganizationMembershipRoleAssignmentsOptions()))
+ await foreach (var item in this.service.ListRoleAssignmentsAutoPagingAsync("test_organization_membership_id", new AuthorizationListRoleAssignmentsOptions()))
{
items.Add(item);
}
@@ -661,13 +661,13 @@ public async Task TestListOrganizationMembershipRoleAssignmentsAutoPagingAsync()
}
[Fact]
- public async Task TestListOrganizationMembershipRoleAssignmentsAutoPagingAsyncEmpty()
+ public async Task TestListRoleAssignmentsAutoPagingAsyncEmpty()
{
var empty = "{\"data\":[],\"list_metadata\":{\"before\":null,\"after\":null}}";
this.httpMock.MockSequentialResponses(HttpMethod.Get, "/authorization/organization_memberships/test_organization_membership_id/role_assignments", HttpStatusCode.OK, new[] { empty });
var items = new List();
- await foreach (var item in this.service.ListOrganizationMembershipRoleAssignmentsAutoPagingAsync("test_organization_membership_id", new AuthorizationListOrganizationMembershipRoleAssignmentsOptions()))
+ await foreach (var item in this.service.ListRoleAssignmentsAutoPagingAsync("test_organization_membership_id", new AuthorizationListRoleAssignmentsOptions()))
{
items.Add(item);
}
@@ -676,7 +676,7 @@ public async Task TestListOrganizationMembershipRoleAssignmentsAutoPagingAsyncEm
}
[Fact]
- public async Task TestListResourceOrganizationMembershipsAutoPagingAsync()
+ public async Task TestListMembershipsForResourceByExternalIdAutoPagingAsync()
{
var fixture = System.IO.File.ReadAllText("testdata/user_organization_membership_base_list_data.json");
var page1 = "{\"data\":[" + fixture + "],\"list_metadata\":{\"before\":null,\"after\":\"cursor_123\"}}";
@@ -684,7 +684,7 @@ public async Task TestListResourceOrganizationMembershipsAutoPagingAsync()
this.httpMock.MockSequentialResponses(HttpMethod.Get, "/authorization/organizations/test_organization_id/resources/test_resource_type_slug/test_external_id/organization_memberships", HttpStatusCode.OK, new[] { page1, page2 });
var items = new List();
- await foreach (var item in this.service.ListResourceOrganizationMembershipsAutoPagingAsync("test_organization_id", "test_resource_type_slug", "test_external_id", new AuthorizationListResourceOrganizationMembershipsOptions()))
+ await foreach (var item in this.service.ListMembershipsForResourceByExternalIdAutoPagingAsync("test_organization_id", "test_resource_type_slug", "test_external_id", new AuthorizationListMembershipsForResourceByExternalIdOptions()))
{
items.Add(item);
}
@@ -693,13 +693,13 @@ public async Task TestListResourceOrganizationMembershipsAutoPagingAsync()
}
[Fact]
- public async Task TestListResourceOrganizationMembershipsAutoPagingAsyncEmpty()
+ public async Task TestListMembershipsForResourceByExternalIdAutoPagingAsyncEmpty()
{
var empty = "{\"data\":[],\"list_metadata\":{\"before\":null,\"after\":null}}";
this.httpMock.MockSequentialResponses(HttpMethod.Get, "/authorization/organizations/test_organization_id/resources/test_resource_type_slug/test_external_id/organization_memberships", HttpStatusCode.OK, new[] { empty });
var items = new List();
- await foreach (var item in this.service.ListResourceOrganizationMembershipsAutoPagingAsync("test_organization_id", "test_resource_type_slug", "test_external_id", new AuthorizationListResourceOrganizationMembershipsOptions()))
+ await foreach (var item in this.service.ListMembershipsForResourceByExternalIdAutoPagingAsync("test_organization_id", "test_resource_type_slug", "test_external_id", new AuthorizationListMembershipsForResourceByExternalIdOptions()))
{
items.Add(item);
}
diff --git a/test/WorkOSTests/Tests/GroupsServiceTest.cs b/test/WorkOSTests/Tests/GroupsServiceTest.cs
new file mode 100644
index 00000000..54e9002b
--- /dev/null
+++ b/test/WorkOSTests/Tests/GroupsServiceTest.cs
@@ -0,0 +1,242 @@
+// This file is auto-generated by oagen. Do not edit.
+
+namespace WorkOSTests
+{
+ using System.Collections.Generic;
+ using System.Net;
+ using System.Net.Http;
+ using System.Threading.Tasks;
+ using WorkOS;
+ using Xunit;
+
+ public class GroupsServiceTest
+ {
+ private readonly HttpMock httpMock;
+ private readonly GroupsService service;
+
+ public GroupsServiceTest()
+ {
+ this.httpMock = new HttpMock();
+ var client = new WorkOSClient(new WorkOSOptions
+ {
+ ApiKey = "sk_test",
+ ClientId = "client_test",
+ HttpClient = this.httpMock.HttpClient,
+ });
+ this.service = new GroupsService(client);
+ }
+
+ [Fact]
+ public async Task TestListOrganizationGroupsAsync()
+ {
+ var fixture = System.IO.File.ReadAllText("testdata/list_group.json");
+ this.httpMock.MockResponse(HttpMethod.Get, "/organizations/test_organizationId/groups", HttpStatusCode.OK, fixture);
+ var result = await this.service.ListOrganizationGroupsAsync("test_organizationId", new GroupsListOrganizationGroupsOptions());
+ Assert.NotNull(result);
+ Assert.NotEmpty(result.Data);
+ this.httpMock.AssertRequestWasMade(HttpMethod.Get, "/organizations/test_organizationId/groups");
+ }
+
+ [Fact]
+ public async Task TestListOrganizationGroupsAsyncEmpty()
+ {
+ this.httpMock.MockResponse(HttpMethod.Get, "/organizations/test_organizationId/groups", HttpStatusCode.OK, "{\"data\":[],\"list_metadata\":{\"before\":null,\"after\":null}}");
+ var result = await this.service.ListOrganizationGroupsAsync("test_organizationId", new GroupsListOrganizationGroupsOptions());
+ Assert.NotNull(result);
+ Assert.Empty(result.Data);
+ }
+
+ [Fact]
+ public async Task TestCreateOrganizationGroupAsync()
+ {
+ var fixture = System.IO.File.ReadAllText("testdata/group.json");
+ this.httpMock.MockResponse(HttpMethod.Post, "/organizations/test_organizationId/groups", HttpStatusCode.OK, fixture);
+ var options = new GroupsCreateOrganizationGroupOptions();
+ options.Name = "test_name";
+ var result = await this.service.CreateOrganizationGroupAsync("test_organizationId", options);
+ Assert.NotNull(result);
+ Assert.Equal("group_01HXYZ123456789ABCDEFGHIJ", result.Id);
+ Assert.Equal("org_01EHWNCE74X7JSDV0X3SZ3KJNY", result.OrganizationId);
+ Assert.Equal("Engineering", result.Name);
+ this.httpMock.AssertRequestWasMade(HttpMethod.Post, "/organizations/test_organizationId/groups");
+ await this.httpMock.AssertRequestBodyContainsAsync("name", "test_name");
+ }
+
+ [Fact]
+ public async Task TestGetOrganizationGroupAsync()
+ {
+ var fixture = System.IO.File.ReadAllText("testdata/group.json");
+ this.httpMock.MockResponse(HttpMethod.Get, "/organizations/test_organizationId/groups/test_groupId", HttpStatusCode.OK, fixture);
+ var result = await this.service.GetOrganizationGroupAsync("test_organizationId", "test_groupId");
+ Assert.NotNull(result);
+ Assert.Equal("group_01HXYZ123456789ABCDEFGHIJ", result.Id);
+ Assert.Equal("org_01EHWNCE74X7JSDV0X3SZ3KJNY", result.OrganizationId);
+ Assert.Equal("Engineering", result.Name);
+ this.httpMock.AssertRequestWasMade(HttpMethod.Get, "/organizations/test_organizationId/groups/test_groupId");
+ }
+
+ [Fact]
+ public async Task TestUpdateOrganizationGroupAsync()
+ {
+ var fixture = System.IO.File.ReadAllText("testdata/group.json");
+ this.httpMock.MockResponse(HttpMethod.Patch, "/organizations/test_organizationId/groups/test_groupId", HttpStatusCode.OK, fixture);
+ var result = await this.service.UpdateOrganizationGroupAsync("test_organizationId", "test_groupId", new GroupsUpdateOrganizationGroupOptions());
+ Assert.NotNull(result);
+ Assert.Equal("group_01HXYZ123456789ABCDEFGHIJ", result.Id);
+ Assert.Equal("org_01EHWNCE74X7JSDV0X3SZ3KJNY", result.OrganizationId);
+ Assert.Equal("Engineering", result.Name);
+ this.httpMock.AssertRequestWasMade(HttpMethod.Patch, "/organizations/test_organizationId/groups/test_groupId");
+ }
+
+ [Fact]
+ public async Task TestDeleteOrganizationGroupAsync()
+ {
+ this.httpMock.MockResponse(HttpMethod.Delete, "/organizations/test_organizationId/groups/test_groupId", HttpStatusCode.NoContent, "");
+ await this.service.DeleteOrganizationGroupAsync("test_organizationId", "test_groupId");
+ this.httpMock.AssertRequestWasMade(HttpMethod.Delete, "/organizations/test_organizationId/groups/test_groupId");
+ }
+
+ [Fact]
+ public async Task TestListOrganizationMembershipsAsync()
+ {
+ var fixture = System.IO.File.ReadAllText("testdata/list_user_organization_membership_base_list_data.json");
+ this.httpMock.MockResponse(HttpMethod.Get, "/organizations/test_organizationId/groups/test_groupId/organization-memberships", HttpStatusCode.OK, fixture);
+ var result = await this.service.ListOrganizationMembershipsAsync("test_organizationId", "test_groupId", new GroupsListOrganizationMembershipsOptions());
+ Assert.NotNull(result);
+ Assert.NotEmpty(result.Data);
+ this.httpMock.AssertRequestWasMade(HttpMethod.Get, "/organizations/test_organizationId/groups/test_groupId/organization-memberships");
+ }
+
+ [Fact]
+ public async Task TestListOrganizationMembershipsAsyncEmpty()
+ {
+ this.httpMock.MockResponse(HttpMethod.Get, "/organizations/test_organizationId/groups/test_groupId/organization-memberships", HttpStatusCode.OK, "{\"data\":[],\"list_metadata\":{\"before\":null,\"after\":null}}");
+ var result = await this.service.ListOrganizationMembershipsAsync("test_organizationId", "test_groupId", new GroupsListOrganizationMembershipsOptions());
+ Assert.NotNull(result);
+ Assert.Empty(result.Data);
+ }
+
+ [Fact]
+ public async Task TestCreateOrganizationMembershipAsync()
+ {
+ var fixture = System.IO.File.ReadAllText("testdata/group.json");
+ this.httpMock.MockResponse(HttpMethod.Post, "/organizations/test_organizationId/groups/test_groupId/organization-memberships", HttpStatusCode.OK, fixture);
+ var options = new GroupsCreateOrganizationMembershipOptions();
+ options.OrganizationMembershipId = "test_organization_membership_id";
+ var result = await this.service.CreateOrganizationMembershipAsync("test_organizationId", "test_groupId", options);
+ Assert.NotNull(result);
+ Assert.Equal("group_01HXYZ123456789ABCDEFGHIJ", result.Id);
+ Assert.Equal("org_01EHWNCE74X7JSDV0X3SZ3KJNY", result.OrganizationId);
+ Assert.Equal("Engineering", result.Name);
+ this.httpMock.AssertRequestWasMade(HttpMethod.Post, "/organizations/test_organizationId/groups/test_groupId/organization-memberships");
+ await this.httpMock.AssertRequestBodyContainsAsync("organization_membership_id", "test_organization_membership_id");
+ }
+
+ [Fact]
+ public async Task TestDeleteOrganizationMembershipAsync()
+ {
+ this.httpMock.MockResponse(HttpMethod.Delete, "/organizations/test_organizationId/groups/test_groupId/organization-memberships/test_omId", HttpStatusCode.NoContent, "");
+ await this.service.DeleteOrganizationMembershipAsync("test_organizationId", "test_groupId", "test_omId");
+ this.httpMock.AssertRequestWasMade(HttpMethod.Delete, "/organizations/test_organizationId/groups/test_groupId/organization-memberships/test_omId");
+ }
+
+ [Fact]
+ public async Task TestListOrganizationGroupsAutoPagingAsync()
+ {
+ var fixture = System.IO.File.ReadAllText("testdata/group.json");
+ var page1 = "{\"data\":[" + fixture + "],\"list_metadata\":{\"before\":null,\"after\":\"cursor_123\"}}";
+ var page2 = "{\"data\":[" + fixture + "],\"list_metadata\":{\"before\":null,\"after\":null}}";
+ this.httpMock.MockSequentialResponses(HttpMethod.Get, "/organizations/test_organizationId/groups", HttpStatusCode.OK, new[] { page1, page2 });
+
+ var items = new List();
+ await foreach (var item in this.service.ListOrganizationGroupsAutoPagingAsync("test_organizationId", new GroupsListOrganizationGroupsOptions()))
+ {
+ items.Add(item);
+ }
+
+ Assert.Equal(2, items.Count);
+ }
+
+ [Fact]
+ public async Task TestListOrganizationGroupsAutoPagingAsyncEmpty()
+ {
+ var empty = "{\"data\":[],\"list_metadata\":{\"before\":null,\"after\":null}}";
+ this.httpMock.MockSequentialResponses(HttpMethod.Get, "/organizations/test_organizationId/groups", HttpStatusCode.OK, new[] { empty });
+
+ var items = new List();
+ await foreach (var item in this.service.ListOrganizationGroupsAutoPagingAsync("test_organizationId", new GroupsListOrganizationGroupsOptions()))
+ {
+ items.Add(item);
+ }
+
+ Assert.Empty(items);
+ }
+
+ [Fact]
+ public async Task TestListOrganizationMembershipsAutoPagingAsync()
+ {
+ var fixture = System.IO.File.ReadAllText("testdata/user_organization_membership_base_list_data.json");
+ var page1 = "{\"data\":[" + fixture + "],\"list_metadata\":{\"before\":null,\"after\":\"cursor_123\"}}";
+ var page2 = "{\"data\":[" + fixture + "],\"list_metadata\":{\"before\":null,\"after\":null}}";
+ this.httpMock.MockSequentialResponses(HttpMethod.Get, "/organizations/test_organizationId/groups/test_groupId/organization-memberships", HttpStatusCode.OK, new[] { page1, page2 });
+
+ var items = new List();
+ await foreach (var item in this.service.ListOrganizationMembershipsAutoPagingAsync("test_organizationId", "test_groupId", new GroupsListOrganizationMembershipsOptions()))
+ {
+ items.Add(item);
+ }
+
+ Assert.Equal(2, items.Count);
+ }
+
+ [Fact]
+ public async Task TestListOrganizationMembershipsAutoPagingAsyncEmpty()
+ {
+ var empty = "{\"data\":[],\"list_metadata\":{\"before\":null,\"after\":null}}";
+ this.httpMock.MockSequentialResponses(HttpMethod.Get, "/organizations/test_organizationId/groups/test_groupId/organization-memberships", HttpStatusCode.OK, new[] { empty });
+
+ var items = new List();
+ await foreach (var item in this.service.ListOrganizationMembershipsAutoPagingAsync("test_organizationId", "test_groupId", new GroupsListOrganizationMembershipsOptions()))
+ {
+ items.Add(item);
+ }
+
+ Assert.Empty(items);
+ }
+
+ [Fact]
+ public async Task TestError401()
+ {
+ this.httpMock.MockResponseForAnyRequest(HttpStatusCode.Unauthorized, "{\"code\":\"unauthorized\",\"message\":\"Unauthorized\"}");
+ await Assert.ThrowsAsync(() => this.service.ListOrganizationGroupsAsync("test_organizationId", new GroupsListOrganizationGroupsOptions()));
+ }
+
+ [Fact]
+ public async Task TestError404()
+ {
+ this.httpMock.MockResponseForAnyRequest(HttpStatusCode.NotFound, "{\"code\":\"not_found\",\"message\":\"Not Found\"}");
+ await Assert.ThrowsAsync(() => this.service.ListOrganizationGroupsAsync("test_organizationId", new GroupsListOrganizationGroupsOptions()));
+ }
+
+ [Fact]
+ public async Task TestError422()
+ {
+ this.httpMock.MockResponseForAnyRequest((HttpStatusCode)422, "{\"code\":\"unprocessable_entity\",\"message\":\"Unprocessable\"}");
+ await Assert.ThrowsAsync(() => this.service.ListOrganizationGroupsAsync("test_organizationId", new GroupsListOrganizationGroupsOptions()));
+ }
+
+ [Fact]
+ public async Task TestError429()
+ {
+ this.httpMock.MockResponseForAnyRequest((HttpStatusCode)429, "{\"code\":\"too_many_requests\",\"message\":\"Too Many Requests\"}");
+ await Assert.ThrowsAsync(() => this.service.ListOrganizationGroupsAsync("test_organizationId", new GroupsListOrganizationGroupsOptions()));
+ }
+
+ [Fact]
+ public async Task TestError500()
+ {
+ this.httpMock.MockResponseForAnyRequest(HttpStatusCode.InternalServerError, "{\"code\":\"server_error\",\"message\":\"Server Error\"}");
+ await Assert.ThrowsAsync(() => this.service.ListOrganizationGroupsAsync("test_organizationId", new GroupsListOrganizationGroupsOptions()));
+ }
+ }
+}
diff --git a/test/WorkOSTests/Tests/UserManagementOrganizationMembershipGroupsServiceTest.cs b/test/WorkOSTests/Tests/UserManagementOrganizationMembershipGroupsServiceTest.cs
new file mode 100644
index 00000000..b0e14999
--- /dev/null
+++ b/test/WorkOSTests/Tests/UserManagementOrganizationMembershipGroupsServiceTest.cs
@@ -0,0 +1,116 @@
+// This file is auto-generated by oagen. Do not edit.
+
+namespace WorkOSTests
+{
+ using System.Collections.Generic;
+ using System.Net;
+ using System.Net.Http;
+ using System.Threading.Tasks;
+ using WorkOS;
+ using Xunit;
+
+ public class UserManagementOrganizationMembershipGroupsServiceTest
+ {
+ private readonly HttpMock httpMock;
+ private readonly UserManagementOrganizationMembershipGroupsService service;
+
+ public UserManagementOrganizationMembershipGroupsServiceTest()
+ {
+ this.httpMock = new HttpMock();
+ var client = new WorkOSClient(new WorkOSOptions
+ {
+ ApiKey = "sk_test",
+ ClientId = "client_test",
+ HttpClient = this.httpMock.HttpClient,
+ });
+ this.service = new UserManagementOrganizationMembershipGroupsService(client);
+ }
+
+ [Fact]
+ public async Task TestListOrganizationMembershipGroupsAsync()
+ {
+ var fixture = System.IO.File.ReadAllText("testdata/list_group.json");
+ this.httpMock.MockResponse(HttpMethod.Get, "/user_management/organization_memberships/test_omId/groups", HttpStatusCode.OK, fixture);
+ var result = await this.service.ListOrganizationMembershipGroupsAsync("test_omId", new UserManagementOrganizationMembershipGroupsListOrganizationMembershipGroupsOptions());
+ Assert.NotNull(result);
+ Assert.NotEmpty(result.Data);
+ this.httpMock.AssertRequestWasMade(HttpMethod.Get, "/user_management/organization_memberships/test_omId/groups");
+ }
+
+ [Fact]
+ public async Task TestListOrganizationMembershipGroupsAsyncEmpty()
+ {
+ this.httpMock.MockResponse(HttpMethod.Get, "/user_management/organization_memberships/test_omId/groups", HttpStatusCode.OK, "{\"data\":[],\"list_metadata\":{\"before\":null,\"after\":null}}");
+ var result = await this.service.ListOrganizationMembershipGroupsAsync("test_omId", new UserManagementOrganizationMembershipGroupsListOrganizationMembershipGroupsOptions());
+ Assert.NotNull(result);
+ Assert.Empty(result.Data);
+ }
+
+ [Fact]
+ public async Task TestListOrganizationMembershipGroupsAutoPagingAsync()
+ {
+ var fixture = System.IO.File.ReadAllText("testdata/group.json");
+ var page1 = "{\"data\":[" + fixture + "],\"list_metadata\":{\"before\":null,\"after\":\"cursor_123\"}}";
+ var page2 = "{\"data\":[" + fixture + "],\"list_metadata\":{\"before\":null,\"after\":null}}";
+ this.httpMock.MockSequentialResponses(HttpMethod.Get, "/user_management/organization_memberships/test_omId/groups", HttpStatusCode.OK, new[] { page1, page2 });
+
+ var items = new List();
+ await foreach (var item in this.service.ListOrganizationMembershipGroupsAutoPagingAsync("test_omId", new UserManagementOrganizationMembershipGroupsListOrganizationMembershipGroupsOptions()))
+ {
+ items.Add(item);
+ }
+
+ Assert.Equal(2, items.Count);
+ }
+
+ [Fact]
+ public async Task TestListOrganizationMembershipGroupsAutoPagingAsyncEmpty()
+ {
+ var empty = "{\"data\":[],\"list_metadata\":{\"before\":null,\"after\":null}}";
+ this.httpMock.MockSequentialResponses(HttpMethod.Get, "/user_management/organization_memberships/test_omId/groups", HttpStatusCode.OK, new[] { empty });
+
+ var items = new List();
+ await foreach (var item in this.service.ListOrganizationMembershipGroupsAutoPagingAsync("test_omId", new UserManagementOrganizationMembershipGroupsListOrganizationMembershipGroupsOptions()))
+ {
+ items.Add(item);
+ }
+
+ Assert.Empty(items);
+ }
+
+ [Fact]
+ public async Task TestError401()
+ {
+ this.httpMock.MockResponseForAnyRequest(HttpStatusCode.Unauthorized, "{\"code\":\"unauthorized\",\"message\":\"Unauthorized\"}");
+ await Assert.ThrowsAsync(() => this.service.ListOrganizationMembershipGroupsAsync("test_omId", new UserManagementOrganizationMembershipGroupsListOrganizationMembershipGroupsOptions()));
+ }
+
+ [Fact]
+ public async Task TestError404()
+ {
+ this.httpMock.MockResponseForAnyRequest(HttpStatusCode.NotFound, "{\"code\":\"not_found\",\"message\":\"Not Found\"}");
+ await Assert.ThrowsAsync(() => this.service.ListOrganizationMembershipGroupsAsync("test_omId", new UserManagementOrganizationMembershipGroupsListOrganizationMembershipGroupsOptions()));
+ }
+
+ [Fact]
+ public async Task TestError422()
+ {
+ this.httpMock.MockResponseForAnyRequest((HttpStatusCode)422, "{\"code\":\"unprocessable_entity\",\"message\":\"Unprocessable\"}");
+ await Assert.ThrowsAsync(() => this.service.ListOrganizationMembershipGroupsAsync("test_omId", new UserManagementOrganizationMembershipGroupsListOrganizationMembershipGroupsOptions()));
+ }
+
+ [Fact]
+ public async Task TestError429()
+ {
+ this.httpMock.MockResponseForAnyRequest((HttpStatusCode)429, "{\"code\":\"too_many_requests\",\"message\":\"Too Many Requests\"}");
+ await Assert.ThrowsAsync(() => this.service.ListOrganizationMembershipGroupsAsync("test_omId", new UserManagementOrganizationMembershipGroupsListOrganizationMembershipGroupsOptions()));
+ }
+
+ [Fact]
+ public async Task TestError500()
+ {
+ this.httpMock.MockResponseForAnyRequest(HttpStatusCode.InternalServerError, "{\"code\":\"server_error\",\"message\":\"Server Error\"}");
+ await Assert.ThrowsAsync(() => this.service.ListOrganizationMembershipGroupsAsync("test_omId", new UserManagementOrganizationMembershipGroupsListOrganizationMembershipGroupsOptions()));
+ }
+ }
+}
diff --git a/test/WorkOSTests/testdata/create_group.json b/test/WorkOSTests/testdata/create_group.json
new file mode 100644
index 00000000..bcb47249
--- /dev/null
+++ b/test/WorkOSTests/testdata/create_group.json
@@ -0,0 +1,4 @@
+{
+ "name": "Engineering",
+ "description": "The engineering team"
+}
diff --git a/test/WorkOSTests/testdata/create_group_membership.json b/test/WorkOSTests/testdata/create_group_membership.json
new file mode 100644
index 00000000..45ebd1dd
--- /dev/null
+++ b/test/WorkOSTests/testdata/create_group_membership.json
@@ -0,0 +1,3 @@
+{
+ "organization_membership_id": "om_01HXYZ123456789ABCDEFGHIJ"
+}
diff --git a/test/WorkOSTests/testdata/create_group_nulls.json b/test/WorkOSTests/testdata/create_group_nulls.json
new file mode 100644
index 00000000..3002f315
--- /dev/null
+++ b/test/WorkOSTests/testdata/create_group_nulls.json
@@ -0,0 +1,4 @@
+{
+ "name": "Engineering",
+ "description": null
+}
diff --git a/test/WorkOSTests/testdata/domain_verification_intent_options.json b/test/WorkOSTests/testdata/domain_verification_intent_options.json
new file mode 100644
index 00000000..d132a78a
--- /dev/null
+++ b/test/WorkOSTests/testdata/domain_verification_intent_options.json
@@ -0,0 +1,3 @@
+{
+ "domain_name": "example.com"
+}
diff --git a/test/WorkOSTests/testdata/domain_verification_intent_options_nulls.json b/test/WorkOSTests/testdata/domain_verification_intent_options_nulls.json
new file mode 100644
index 00000000..00fca91e
--- /dev/null
+++ b/test/WorkOSTests/testdata/domain_verification_intent_options_nulls.json
@@ -0,0 +1,3 @@
+{
+ "domain_name": null
+}
diff --git a/test/WorkOSTests/testdata/generate_link.json b/test/WorkOSTests/testdata/generate_link.json
index 660b36a7..4be367d9 100644
--- a/test/WorkOSTests/testdata/generate_link.json
+++ b/test/WorkOSTests/testdata/generate_link.json
@@ -7,9 +7,15 @@
"sso": {
"bookmark_slug": "chatgpt",
"provider_type": "GoogleSAML"
+ },
+ "domain_verification": {
+ "domain_name": "example.com"
}
},
"admin_emails": [
"admin@example.com"
+ ],
+ "it_contact_emails": [
+ "it-contact@example.com"
]
}
diff --git a/test/WorkOSTests/testdata/generate_link_nulls.json b/test/WorkOSTests/testdata/generate_link_nulls.json
index 942c6ea8..d4129de8 100644
--- a/test/WorkOSTests/testdata/generate_link_nulls.json
+++ b/test/WorkOSTests/testdata/generate_link_nulls.json
@@ -4,5 +4,6 @@
"organization": "org_01EHZNVPK3SFK441A1RGBFSHRT",
"intent": null,
"intent_options": null,
- "admin_emails": null
+ "admin_emails": null,
+ "it_contact_emails": null
}
diff --git a/test/WorkOSTests/testdata/intent_options.json b/test/WorkOSTests/testdata/intent_options.json
index 31bad913..894d5998 100644
--- a/test/WorkOSTests/testdata/intent_options.json
+++ b/test/WorkOSTests/testdata/intent_options.json
@@ -2,5 +2,8 @@
"sso": {
"bookmark_slug": "chatgpt",
"provider_type": "GoogleSAML"
+ },
+ "domain_verification": {
+ "domain_name": "example.com"
}
}
diff --git a/test/WorkOSTests/testdata/intent_options_nulls.json b/test/WorkOSTests/testdata/intent_options_nulls.json
new file mode 100644
index 00000000..b75aeabd
--- /dev/null
+++ b/test/WorkOSTests/testdata/intent_options_nulls.json
@@ -0,0 +1,4 @@
+{
+ "sso": null,
+ "domain_verification": null
+}
diff --git a/test/WorkOSTests/testdata/invitation.json b/test/WorkOSTests/testdata/invitation.json
index c2019df7..5dabcd8e 100644
--- a/test/WorkOSTests/testdata/invitation.json
+++ b/test/WorkOSTests/testdata/invitation.json
@@ -12,5 +12,6 @@
"created_at": "2026-01-15T12:00:00.000Z",
"updated_at": "2026-01-15T12:00:00.000Z",
"token": "Z1uX3RbwcIl5fIGJJJCXXisdI",
- "accept_invitation_url": "https://your-app.com/invite?invitation_token=Z1uX3RbwcIl5fIGJJJCXXisdI"
+ "accept_invitation_url": "https://your-app.com/invite?invitation_token=Z1uX3RbwcIl5fIGJJJCXXisdI",
+ "role_slug": "admin"
}
diff --git a/test/WorkOSTests/testdata/invitation_accepted.json b/test/WorkOSTests/testdata/invitation_accepted.json
index 61b93ab4..100adfa9 100644
--- a/test/WorkOSTests/testdata/invitation_accepted.json
+++ b/test/WorkOSTests/testdata/invitation_accepted.json
@@ -13,7 +13,8 @@
"inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3",
"accepted_user_id": null,
"created_at": "2026-01-15T12:00:00.000Z",
- "updated_at": "2026-01-15T12:00:00.000Z"
+ "updated_at": "2026-01-15T12:00:00.000Z",
+ "role_slug": "admin"
},
"created_at": "2026-01-15T12:00:00.000Z",
"context": {
diff --git a/test/WorkOSTests/testdata/invitation_accepted_data.json b/test/WorkOSTests/testdata/invitation_accepted_data.json
index 66102c6b..94f2e81d 100644
--- a/test/WorkOSTests/testdata/invitation_accepted_data.json
+++ b/test/WorkOSTests/testdata/invitation_accepted_data.json
@@ -10,5 +10,6 @@
"inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3",
"accepted_user_id": null,
"created_at": "2026-01-15T12:00:00.000Z",
- "updated_at": "2026-01-15T12:00:00.000Z"
+ "updated_at": "2026-01-15T12:00:00.000Z",
+ "role_slug": "admin"
}
diff --git a/test/WorkOSTests/testdata/invitation_accepted_data_nulls.json b/test/WorkOSTests/testdata/invitation_accepted_data_nulls.json
index cc675407..90adba7d 100644
--- a/test/WorkOSTests/testdata/invitation_accepted_data_nulls.json
+++ b/test/WorkOSTests/testdata/invitation_accepted_data_nulls.json
@@ -10,5 +10,6 @@
"inviter_user_id": null,
"accepted_user_id": null,
"created_at": "2026-01-15T12:00:00.000Z",
- "updated_at": "2026-01-15T12:00:00.000Z"
+ "updated_at": "2026-01-15T12:00:00.000Z",
+ "role_slug": null
}
diff --git a/test/WorkOSTests/testdata/invitation_accepted_nulls.json b/test/WorkOSTests/testdata/invitation_accepted_nulls.json
index a8692414..c9bf9790 100644
--- a/test/WorkOSTests/testdata/invitation_accepted_nulls.json
+++ b/test/WorkOSTests/testdata/invitation_accepted_nulls.json
@@ -13,7 +13,8 @@
"inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3",
"accepted_user_id": null,
"created_at": "2026-01-15T12:00:00.000Z",
- "updated_at": "2026-01-15T12:00:00.000Z"
+ "updated_at": "2026-01-15T12:00:00.000Z",
+ "role_slug": "admin"
},
"created_at": "2026-01-15T12:00:00.000Z",
"context": null,
diff --git a/test/WorkOSTests/testdata/invitation_created.json b/test/WorkOSTests/testdata/invitation_created.json
index c83b104d..b1398e12 100644
--- a/test/WorkOSTests/testdata/invitation_created.json
+++ b/test/WorkOSTests/testdata/invitation_created.json
@@ -13,7 +13,8 @@
"inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3",
"accepted_user_id": null,
"created_at": "2026-01-15T12:00:00.000Z",
- "updated_at": "2026-01-15T12:00:00.000Z"
+ "updated_at": "2026-01-15T12:00:00.000Z",
+ "role_slug": "admin"
},
"created_at": "2026-01-15T12:00:00.000Z",
"context": {
diff --git a/test/WorkOSTests/testdata/invitation_created_data.json b/test/WorkOSTests/testdata/invitation_created_data.json
index 66102c6b..94f2e81d 100644
--- a/test/WorkOSTests/testdata/invitation_created_data.json
+++ b/test/WorkOSTests/testdata/invitation_created_data.json
@@ -10,5 +10,6 @@
"inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3",
"accepted_user_id": null,
"created_at": "2026-01-15T12:00:00.000Z",
- "updated_at": "2026-01-15T12:00:00.000Z"
+ "updated_at": "2026-01-15T12:00:00.000Z",
+ "role_slug": "admin"
}
diff --git a/test/WorkOSTests/testdata/invitation_created_data_nulls.json b/test/WorkOSTests/testdata/invitation_created_data_nulls.json
index cc675407..90adba7d 100644
--- a/test/WorkOSTests/testdata/invitation_created_data_nulls.json
+++ b/test/WorkOSTests/testdata/invitation_created_data_nulls.json
@@ -10,5 +10,6 @@
"inviter_user_id": null,
"accepted_user_id": null,
"created_at": "2026-01-15T12:00:00.000Z",
- "updated_at": "2026-01-15T12:00:00.000Z"
+ "updated_at": "2026-01-15T12:00:00.000Z",
+ "role_slug": null
}
diff --git a/test/WorkOSTests/testdata/invitation_created_nulls.json b/test/WorkOSTests/testdata/invitation_created_nulls.json
index 57fbabee..5d322576 100644
--- a/test/WorkOSTests/testdata/invitation_created_nulls.json
+++ b/test/WorkOSTests/testdata/invitation_created_nulls.json
@@ -13,7 +13,8 @@
"inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3",
"accepted_user_id": null,
"created_at": "2026-01-15T12:00:00.000Z",
- "updated_at": "2026-01-15T12:00:00.000Z"
+ "updated_at": "2026-01-15T12:00:00.000Z",
+ "role_slug": "admin"
},
"created_at": "2026-01-15T12:00:00.000Z",
"context": null,
diff --git a/test/WorkOSTests/testdata/invitation_nulls.json b/test/WorkOSTests/testdata/invitation_nulls.json
index 8f0332fe..5f335e99 100644
--- a/test/WorkOSTests/testdata/invitation_nulls.json
+++ b/test/WorkOSTests/testdata/invitation_nulls.json
@@ -12,5 +12,6 @@
"created_at": "2026-01-15T12:00:00.000Z",
"updated_at": "2026-01-15T12:00:00.000Z",
"token": "Z1uX3RbwcIl5fIGJJJCXXisdI",
- "accept_invitation_url": "https://your-app.com/invite?invitation_token=Z1uX3RbwcIl5fIGJJJCXXisdI"
+ "accept_invitation_url": "https://your-app.com/invite?invitation_token=Z1uX3RbwcIl5fIGJJJCXXisdI",
+ "role_slug": null
}
diff --git a/test/WorkOSTests/testdata/invitation_resent.json b/test/WorkOSTests/testdata/invitation_resent.json
index 7ace11e7..17adc958 100644
--- a/test/WorkOSTests/testdata/invitation_resent.json
+++ b/test/WorkOSTests/testdata/invitation_resent.json
@@ -13,7 +13,8 @@
"inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3",
"accepted_user_id": null,
"created_at": "2026-01-15T12:00:00.000Z",
- "updated_at": "2026-01-15T12:00:00.000Z"
+ "updated_at": "2026-01-15T12:00:00.000Z",
+ "role_slug": "admin"
},
"created_at": "2026-01-15T12:00:00.000Z",
"context": {
diff --git a/test/WorkOSTests/testdata/invitation_resent_data.json b/test/WorkOSTests/testdata/invitation_resent_data.json
index 66102c6b..94f2e81d 100644
--- a/test/WorkOSTests/testdata/invitation_resent_data.json
+++ b/test/WorkOSTests/testdata/invitation_resent_data.json
@@ -10,5 +10,6 @@
"inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3",
"accepted_user_id": null,
"created_at": "2026-01-15T12:00:00.000Z",
- "updated_at": "2026-01-15T12:00:00.000Z"
+ "updated_at": "2026-01-15T12:00:00.000Z",
+ "role_slug": "admin"
}
diff --git a/test/WorkOSTests/testdata/invitation_resent_data_nulls.json b/test/WorkOSTests/testdata/invitation_resent_data_nulls.json
index cc675407..90adba7d 100644
--- a/test/WorkOSTests/testdata/invitation_resent_data_nulls.json
+++ b/test/WorkOSTests/testdata/invitation_resent_data_nulls.json
@@ -10,5 +10,6 @@
"inviter_user_id": null,
"accepted_user_id": null,
"created_at": "2026-01-15T12:00:00.000Z",
- "updated_at": "2026-01-15T12:00:00.000Z"
+ "updated_at": "2026-01-15T12:00:00.000Z",
+ "role_slug": null
}
diff --git a/test/WorkOSTests/testdata/invitation_resent_nulls.json b/test/WorkOSTests/testdata/invitation_resent_nulls.json
index eebb9054..7e6b98c9 100644
--- a/test/WorkOSTests/testdata/invitation_resent_nulls.json
+++ b/test/WorkOSTests/testdata/invitation_resent_nulls.json
@@ -13,7 +13,8 @@
"inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3",
"accepted_user_id": null,
"created_at": "2026-01-15T12:00:00.000Z",
- "updated_at": "2026-01-15T12:00:00.000Z"
+ "updated_at": "2026-01-15T12:00:00.000Z",
+ "role_slug": "admin"
},
"created_at": "2026-01-15T12:00:00.000Z",
"context": null,
diff --git a/test/WorkOSTests/testdata/invitation_revoked.json b/test/WorkOSTests/testdata/invitation_revoked.json
index e8f8ff62..e22216e3 100644
--- a/test/WorkOSTests/testdata/invitation_revoked.json
+++ b/test/WorkOSTests/testdata/invitation_revoked.json
@@ -13,7 +13,8 @@
"inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3",
"accepted_user_id": null,
"created_at": "2026-01-15T12:00:00.000Z",
- "updated_at": "2026-01-15T12:00:00.000Z"
+ "updated_at": "2026-01-15T12:00:00.000Z",
+ "role_slug": "admin"
},
"created_at": "2026-01-15T12:00:00.000Z",
"context": {
diff --git a/test/WorkOSTests/testdata/invitation_revoked_data.json b/test/WorkOSTests/testdata/invitation_revoked_data.json
index 66102c6b..94f2e81d 100644
--- a/test/WorkOSTests/testdata/invitation_revoked_data.json
+++ b/test/WorkOSTests/testdata/invitation_revoked_data.json
@@ -10,5 +10,6 @@
"inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3",
"accepted_user_id": null,
"created_at": "2026-01-15T12:00:00.000Z",
- "updated_at": "2026-01-15T12:00:00.000Z"
+ "updated_at": "2026-01-15T12:00:00.000Z",
+ "role_slug": "admin"
}
diff --git a/test/WorkOSTests/testdata/invitation_revoked_data_nulls.json b/test/WorkOSTests/testdata/invitation_revoked_data_nulls.json
index cc675407..90adba7d 100644
--- a/test/WorkOSTests/testdata/invitation_revoked_data_nulls.json
+++ b/test/WorkOSTests/testdata/invitation_revoked_data_nulls.json
@@ -10,5 +10,6 @@
"inviter_user_id": null,
"accepted_user_id": null,
"created_at": "2026-01-15T12:00:00.000Z",
- "updated_at": "2026-01-15T12:00:00.000Z"
+ "updated_at": "2026-01-15T12:00:00.000Z",
+ "role_slug": null
}
diff --git a/test/WorkOSTests/testdata/invitation_revoked_nulls.json b/test/WorkOSTests/testdata/invitation_revoked_nulls.json
index bc7f5efd..4c389b79 100644
--- a/test/WorkOSTests/testdata/invitation_revoked_nulls.json
+++ b/test/WorkOSTests/testdata/invitation_revoked_nulls.json
@@ -13,7 +13,8 @@
"inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3",
"accepted_user_id": null,
"created_at": "2026-01-15T12:00:00.000Z",
- "updated_at": "2026-01-15T12:00:00.000Z"
+ "updated_at": "2026-01-15T12:00:00.000Z",
+ "role_slug": "admin"
},
"created_at": "2026-01-15T12:00:00.000Z",
"context": null,
diff --git a/test/WorkOSTests/testdata/list_empty_group.json b/test/WorkOSTests/testdata/list_empty_group.json
new file mode 100644
index 00000000..b11391a0
--- /dev/null
+++ b/test/WorkOSTests/testdata/list_empty_group.json
@@ -0,0 +1,7 @@
+{
+ "data": [],
+ "list_metadata": {
+ "before": null,
+ "after": null
+ }
+}
diff --git a/test/WorkOSTests/testdata/list_group.json b/test/WorkOSTests/testdata/list_group.json
new file mode 100644
index 00000000..9516016b
--- /dev/null
+++ b/test/WorkOSTests/testdata/list_group.json
@@ -0,0 +1,17 @@
+{
+ "data": [
+ {
+ "object": "group",
+ "id": "group_01HXYZ123456789ABCDEFGHIJ",
+ "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY",
+ "name": "Engineering",
+ "description": "The engineering team",
+ "created_at": "2026-01-15T12:00:00.000Z",
+ "updated_at": "2026-01-15T12:00:00.000Z"
+ }
+ ],
+ "list_metadata": {
+ "before": null,
+ "after": null
+ }
+}
diff --git a/test/WorkOSTests/testdata/list_user_invite.json b/test/WorkOSTests/testdata/list_user_invite.json
index 355f3e44..6288c488 100644
--- a/test/WorkOSTests/testdata/list_user_invite.json
+++ b/test/WorkOSTests/testdata/list_user_invite.json
@@ -11,6 +11,7 @@
"organization_id": "org_01E4ZCR3C56J083X43JQXF3JK5",
"inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3",
"accepted_user_id": null,
+ "role_slug": "admin",
"created_at": "2026-01-15T12:00:00.000Z",
"updated_at": "2026-01-15T12:00:00.000Z",
"token": "Z1uX3RbwcIl5fIGJJJCXXisdI",
diff --git a/test/WorkOSTests/testdata/update_group.json b/test/WorkOSTests/testdata/update_group.json
new file mode 100644
index 00000000..bcb47249
--- /dev/null
+++ b/test/WorkOSTests/testdata/update_group.json
@@ -0,0 +1,4 @@
+{
+ "name": "Engineering",
+ "description": "The engineering team"
+}
diff --git a/test/WorkOSTests/testdata/update_group_nulls.json b/test/WorkOSTests/testdata/update_group_nulls.json
new file mode 100644
index 00000000..7de5d2c4
--- /dev/null
+++ b/test/WorkOSTests/testdata/update_group_nulls.json
@@ -0,0 +1,4 @@
+{
+ "name": null,
+ "description": null
+}
diff --git a/test/WorkOSTests/testdata/user_invite.json b/test/WorkOSTests/testdata/user_invite.json
index b3a1dbbd..9c91ed19 100644
--- a/test/WorkOSTests/testdata/user_invite.json
+++ b/test/WorkOSTests/testdata/user_invite.json
@@ -12,5 +12,6 @@
"created_at": "2026-01-15T12:00:00.000Z",
"updated_at": "2026-01-15T12:00:00.000Z",
"token": "Z1uX3RbwcIl5fIGJJJCXXisdI",
- "accept_invitation_url": "https://your-app.com/invite?invitation_token=Z1uX3RbwcIl5fIGJJJCXXisdI"
+ "accept_invitation_url": "https://your-app.com/invite?invitation_token=Z1uX3RbwcIl5fIGJJJCXXisdI",
+ "role_slug": "admin"
}
diff --git a/test/WorkOSTests/testdata/user_invite_nulls.json b/test/WorkOSTests/testdata/user_invite_nulls.json
index abc995cb..b3526d3a 100644
--- a/test/WorkOSTests/testdata/user_invite_nulls.json
+++ b/test/WorkOSTests/testdata/user_invite_nulls.json
@@ -12,5 +12,6 @@
"created_at": "2026-01-15T12:00:00.000Z",
"updated_at": "2026-01-15T12:00:00.000Z",
"token": "Z1uX3RbwcIl5fIGJJJCXXisdI",
- "accept_invitation_url": "https://your-app.com/invite?invitation_token=Z1uX3RbwcIl5fIGJJJCXXisdI"
+ "accept_invitation_url": "https://your-app.com/invite?invitation_token=Z1uX3RbwcIl5fIGJJJCXXisdI",
+ "role_slug": null
}
diff --git a/test/WorkOSTests/testdata/waitlist_user.json b/test/WorkOSTests/testdata/waitlist_user.json
new file mode 100644
index 00000000..05973598
--- /dev/null
+++ b/test/WorkOSTests/testdata/waitlist_user.json
@@ -0,0 +1,9 @@
+{
+ "object": "waitlist_user",
+ "id": "wl_user_01E4ZCR3C56J083X43JQXF3JK5",
+ "email": "marcelina.davis@example.com",
+ "state": "pending",
+ "approved_at": null,
+ "created_at": "2026-01-15T12:00:00.000Z",
+ "updated_at": "2026-01-15T12:00:00.000Z"
+}
diff --git a/test/WorkOSTests/testdata/waitlist_user_approved.json b/test/WorkOSTests/testdata/waitlist_user_approved.json
new file mode 100644
index 00000000..eddf230b
--- /dev/null
+++ b/test/WorkOSTests/testdata/waitlist_user_approved.json
@@ -0,0 +1,35 @@
+{
+ "id": "event_01EHZNVPK3SFK441A1RGBFSHRT",
+ "event": "waitlist_user.approved",
+ "data": {
+ "object": "waitlist_user",
+ "id": "wl_user_01E4ZCR3C56J083X43JQXF3JK5",
+ "email": "marcelina.davis@example.com",
+ "state": "pending",
+ "approved_at": null,
+ "created_at": "2026-01-15T12:00:00.000Z",
+ "updated_at": "2026-01-15T12:00:00.000Z"
+ },
+ "created_at": "2026-01-15T12:00:00.000Z",
+ "context": {
+ "google_analytics_client_id": "GA1.2.1234567890.1234567890",
+ "google_analytics_sessions": [
+ {
+ "containerId": "GTM-ABCDEF",
+ "sessionId": "1234567890",
+ "sessionNumber": "1"
+ }
+ ],
+ "ajs_anonymous_id": "ajs_anon_01EHWNCE74X7JSDV0X3SZ3KJNY",
+ "client_id": "client_01EHWNCE74X7JSDV0X3SZ3KJNY",
+ "actor": {
+ "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY",
+ "source": "api",
+ "name": "Jane Doe"
+ },
+ "previous_attributes": {
+ "key": {}
+ }
+ },
+ "object": "event"
+}
diff --git a/test/WorkOSTests/testdata/waitlist_user_approved_nulls.json b/test/WorkOSTests/testdata/waitlist_user_approved_nulls.json
new file mode 100644
index 00000000..b1fe27af
--- /dev/null
+++ b/test/WorkOSTests/testdata/waitlist_user_approved_nulls.json
@@ -0,0 +1,16 @@
+{
+ "id": "event_01EHZNVPK3SFK441A1RGBFSHRT",
+ "event": "waitlist_user.approved",
+ "data": {
+ "object": "waitlist_user",
+ "id": "wl_user_01E4ZCR3C56J083X43JQXF3JK5",
+ "email": "marcelina.davis@example.com",
+ "state": "pending",
+ "approved_at": null,
+ "created_at": "2026-01-15T12:00:00.000Z",
+ "updated_at": "2026-01-15T12:00:00.000Z"
+ },
+ "created_at": "2026-01-15T12:00:00.000Z",
+ "context": null,
+ "object": "event"
+}
diff --git a/test/WorkOSTests/testdata/waitlist_user_created.json b/test/WorkOSTests/testdata/waitlist_user_created.json
new file mode 100644
index 00000000..c3faaad7
--- /dev/null
+++ b/test/WorkOSTests/testdata/waitlist_user_created.json
@@ -0,0 +1,35 @@
+{
+ "id": "event_01EHZNVPK3SFK441A1RGBFSHRT",
+ "event": "waitlist_user.created",
+ "data": {
+ "object": "waitlist_user",
+ "id": "wl_user_01E4ZCR3C56J083X43JQXF3JK5",
+ "email": "marcelina.davis@example.com",
+ "state": "pending",
+ "approved_at": null,
+ "created_at": "2026-01-15T12:00:00.000Z",
+ "updated_at": "2026-01-15T12:00:00.000Z"
+ },
+ "created_at": "2026-01-15T12:00:00.000Z",
+ "context": {
+ "google_analytics_client_id": "GA1.2.1234567890.1234567890",
+ "google_analytics_sessions": [
+ {
+ "containerId": "GTM-ABCDEF",
+ "sessionId": "1234567890",
+ "sessionNumber": "1"
+ }
+ ],
+ "ajs_anonymous_id": "ajs_anon_01EHWNCE74X7JSDV0X3SZ3KJNY",
+ "client_id": "client_01EHWNCE74X7JSDV0X3SZ3KJNY",
+ "actor": {
+ "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY",
+ "source": "api",
+ "name": "Jane Doe"
+ },
+ "previous_attributes": {
+ "key": {}
+ }
+ },
+ "object": "event"
+}
diff --git a/test/WorkOSTests/testdata/waitlist_user_created_nulls.json b/test/WorkOSTests/testdata/waitlist_user_created_nulls.json
new file mode 100644
index 00000000..611e5c79
--- /dev/null
+++ b/test/WorkOSTests/testdata/waitlist_user_created_nulls.json
@@ -0,0 +1,16 @@
+{
+ "id": "event_01EHZNVPK3SFK441A1RGBFSHRT",
+ "event": "waitlist_user.created",
+ "data": {
+ "object": "waitlist_user",
+ "id": "wl_user_01E4ZCR3C56J083X43JQXF3JK5",
+ "email": "marcelina.davis@example.com",
+ "state": "pending",
+ "approved_at": null,
+ "created_at": "2026-01-15T12:00:00.000Z",
+ "updated_at": "2026-01-15T12:00:00.000Z"
+ },
+ "created_at": "2026-01-15T12:00:00.000Z",
+ "context": null,
+ "object": "event"
+}
diff --git a/test/WorkOSTests/testdata/waitlist_user_denied.json b/test/WorkOSTests/testdata/waitlist_user_denied.json
new file mode 100644
index 00000000..6079919b
--- /dev/null
+++ b/test/WorkOSTests/testdata/waitlist_user_denied.json
@@ -0,0 +1,35 @@
+{
+ "id": "event_01EHZNVPK3SFK441A1RGBFSHRT",
+ "event": "waitlist_user.denied",
+ "data": {
+ "object": "waitlist_user",
+ "id": "wl_user_01E4ZCR3C56J083X43JQXF3JK5",
+ "email": "marcelina.davis@example.com",
+ "state": "pending",
+ "approved_at": null,
+ "created_at": "2026-01-15T12:00:00.000Z",
+ "updated_at": "2026-01-15T12:00:00.000Z"
+ },
+ "created_at": "2026-01-15T12:00:00.000Z",
+ "context": {
+ "google_analytics_client_id": "GA1.2.1234567890.1234567890",
+ "google_analytics_sessions": [
+ {
+ "containerId": "GTM-ABCDEF",
+ "sessionId": "1234567890",
+ "sessionNumber": "1"
+ }
+ ],
+ "ajs_anonymous_id": "ajs_anon_01EHWNCE74X7JSDV0X3SZ3KJNY",
+ "client_id": "client_01EHWNCE74X7JSDV0X3SZ3KJNY",
+ "actor": {
+ "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY",
+ "source": "api",
+ "name": "Jane Doe"
+ },
+ "previous_attributes": {
+ "key": {}
+ }
+ },
+ "object": "event"
+}
diff --git a/test/WorkOSTests/testdata/waitlist_user_denied_nulls.json b/test/WorkOSTests/testdata/waitlist_user_denied_nulls.json
new file mode 100644
index 00000000..cc8ac520
--- /dev/null
+++ b/test/WorkOSTests/testdata/waitlist_user_denied_nulls.json
@@ -0,0 +1,16 @@
+{
+ "id": "event_01EHZNVPK3SFK441A1RGBFSHRT",
+ "event": "waitlist_user.denied",
+ "data": {
+ "object": "waitlist_user",
+ "id": "wl_user_01E4ZCR3C56J083X43JQXF3JK5",
+ "email": "marcelina.davis@example.com",
+ "state": "pending",
+ "approved_at": null,
+ "created_at": "2026-01-15T12:00:00.000Z",
+ "updated_at": "2026-01-15T12:00:00.000Z"
+ },
+ "created_at": "2026-01-15T12:00:00.000Z",
+ "context": null,
+ "object": "event"
+}
diff --git a/test/WorkOSTests/testdata/waitlist_user_nulls.json b/test/WorkOSTests/testdata/waitlist_user_nulls.json
new file mode 100644
index 00000000..05973598
--- /dev/null
+++ b/test/WorkOSTests/testdata/waitlist_user_nulls.json
@@ -0,0 +1,9 @@
+{
+ "object": "waitlist_user",
+ "id": "wl_user_01E4ZCR3C56J083X43JQXF3JK5",
+ "email": "marcelina.davis@example.com",
+ "state": "pending",
+ "approved_at": null,
+ "created_at": "2026-01-15T12:00:00.000Z",
+ "updated_at": "2026-01-15T12:00:00.000Z"
+}