Skip to content

Update OpenAPI spec (53bf696) - #77

Merged
gjtorikian merged 4 commits into
mainfrom
update-spec-20260724-190038-30119064196
Jul 26, 2026
Merged

Update OpenAPI spec (53bf696)#77
gjtorikian merged 4 commits into
mainfrom
update-spec-20260724-190038-30119064196

Conversation

@workos-sdk-automation

Copy link
Copy Markdown
Contributor

🤖 I see new OpenAPI changes beep boop

Automated update from https://github.com/workos/workos/tree/53bf6960607cb91b93bc11a86901bdf68e90bb30

Source PRs

  • workos/workos#66577
Changes



└─┬Paths
  └─┬/user_management/authenticate
    └─┬POST
      └─┬Responses
        └─┬429
          └─┬Content
            └─┬application/json
              └─┬Schema
                ├──[➖] required (13137:21)❌ 
                ├──[➖] required (13138:21)❌ 
                ├──[➖] type (13124:15)
                ├──[➖] properties/code (13127:19)❌ 
                ├──[➖] properties/message (13132:19)❌ 
                ├──[➕] oneOf (13126:21)
                └──[➕] oneOf (13140:21)


| Document Element | Total Changes | Breaking Changes |
|------------------|---------------|------------------|
| paths            | 7             | 4                |

Date: 07/24/26 | Commit: Update OpenAPI spec from workos/workos@53bf6960607cb91b93bc11a86901bdf68e90bb30

- ❌ **BREAKING Changes**: _4_ out of _7_
- **Removals**: _5_
- **Additions**: _2_
- **Breaking Removals**: _4_

ERROR: breaking changes discovered

github-actions Bot added a commit that referenced this pull request Jul 24, 2026
@greptile-apps

greptile-apps Bot commented Jul 24, 2026

Copy link
Copy Markdown

Greptile Summary

This automated PR updates the OpenAPI spec for POST /user_management/authenticate's 429 response and fixes scope-resolution regressions in the SDK release tooling where several symbols were incorrectly resolving to the sdk catch-all scope in CI.

  • Spec change: The 429 error body is expanded from a single {code, message} object to a oneOf covering two shapes — the existing rate-limit shape and an OAuth-style {error, error_description} shape, reflecting that OAuth-grant requests need a different error format.
  • Scope fixes (sdk-release-metadata.mjs): New scopeFromName rules map Agent*, ClientApi, ApplicationSecret, Authorization, and AdminPortal prefixes to their correct scopes; factsFromCompat is now exported so tests can exercise it directly.
  • Truncation guard (sdk-compat-pr-comment.mjs): truncateForComment caps the generated GitHub comment at 65,536 characters to avoid HTTP 422 rejections on large spec diffs, closing any split <details> blocks and appending a link to the full report.

Confidence Score: 5/5

Safe to merge — the spec change is intentional and isolated to the 429 response shape, and all scripting changes are well-tested.

The OpenAPI change broadens the 429 response to a oneOf (a known breaking change, flagged in the PR diff report and already reviewed), the scope-resolution fixes are covered by new regression tests, and the truncation guard has correct budget math. No logic errors or security concerns found.

Files Needing Attention: spec/open-api-spec.yaml — contains the breaking schema change that downstream SDK consumers will need to adapt to.

Important Files Changed

Filename Overview
spec/open-api-spec.yaml 429 response for POST /user_management/authenticate changed from a single object to a oneOf of two shapes (rate-limit and OAuth-style); this is a breaking change for existing consumers expecting required code/message fields.
scripts/sdk-compat-pr-comment.mjs Adds truncateForComment to cap comment bodies at 65,536 chars; budget accounting, openDetails balancing, and fallback link logic all look correct.
scripts/sdk-release-metadata.mjs New scopeFromName rules for Agent*, ClientApi, ApplicationSecret, Authorization, AdminPortal; agents scope added to SCOPE_LABELS/SCOPE_DOC_URLS; factsFromCompat exported. Logic is consistent with existing patterns and well-commented.
scripts/tests/sdk-release-metadata.spec.mjs Adds regression tests for all five new symbol-to-scope mappings via the now-exported factsFromCompat; EMPTY_INDEXES reuse and assertions are correct.
.last-synced-sha Routine bump of the last-synced commit SHA.

Sequence Diagram

sequenceDiagram
    participant SDK as SDK/Client
    participant API as POST /user_management/authenticate
    participant TF as truncateForComment
    participant GH as GitHub API

    SDK->>API: Authenticate request
    alt Standard rate-limit (non-OAuth)
        API-->>SDK: "429 {code: "daily_quota_exceeded", message: "..."}"
    else OAuth grant flow
        API-->>SDK: "429 {error: "too_many_requests", error_description: "..."}"
    end

    Note over TF,GH: SDK compat comment pipeline
    TF->>TF: Build markdown report
    TF->>TF: truncateForComment() cap at 65,536 chars
    alt Report fits
        TF->>GH: POST full comment body
    else Report overflows
        TF->>TF: Trim at line boundary, close open details blocks
        TF->>GH: POST truncated body + link to full report
    end
Loading

Reviews (3): Last reviewed commit: "fix: map remaining unscoped compat surfa..." | Re-trigger Greptile

Comment thread spec/open-api-spec.yaml
Comment on lines +13125 to +13153
oneOf:
- type: object
properties:
code:
type: string
description: The error code identifying the type of error.
example: daily_quota_exceeded
const: daily_quota_exceeded
message:
type: string
description: A human-readable description of the error.
example: Request could not be processed.
required:
- code
- message
- type: object
properties:
error:
type: string
description: The OAuth error code.
example: too_many_requests
const: too_many_requests
error_description:
type: string
description: A human-readable description of the error.
example: 'The request failed due to: too_many_requests.'
required:
- error
- error_description

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 oneOf without a discriminator makes variant selection ambiguous for tooling

The two oneOf variants share no common property name (code/message vs error/error_description), so an OpenAPI discriminator cannot be applied. Code generators and strictly-typed SDK consumers will produce union types with no programmatic way to distinguish which variant was received — they must fall back to inspecting field presence at runtime. Consider documenting the dispatch rule (e.g., OAuth-grant requests receive the error/error_description shape; all other requests receive code/message) in the description field of the 429 response (which is currently empty) so that consumers understand when to expect each variant.

Prompt To Fix With AI
This is a comment left during a code review.
Path: spec/open-api-spec.yaml
Line: 13125-13153

Comment:
**`oneOf` without a discriminator makes variant selection ambiguous for tooling**

The two `oneOf` variants share no common property name (`code`/`message` vs `error`/`error_description`), so an OpenAPI `discriminator` cannot be applied. Code generators and strictly-typed SDK consumers will produce union types with no programmatic way to distinguish which variant was received — they must fall back to inspecting field presence at runtime. Consider documenting the dispatch rule (e.g., OAuth-grant requests receive the `error`/`error_description` shape; all other requests receive `code`/`message`) in the `description` field of the `429` response (which is currently empty) so that consumers understand when to expect each variant.

How can I resolve this? If you propose a fix, please make it concise.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Large spec diffs produced a comment body over GitHub's 65,536-character
issue-comment limit, so the sdk-validation job failed with HTTP 422
"Body is too long" when posting the comment.

Add truncateForComment: on overflow it trims at a line boundary under
the limit, keeps the tracking marker first, closes any <details> blocks
it cut through, and appends a note linking to the full report.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

SDK compatibility report

📄 View full code diff

Language Breaking Soft-risk Additive
dotnet 0 0 2
go 0 0 2
ios 0 0 0
kotlin 0 10 0
php 0 5 2
python 2407 2 2
ruby 0 1 2
rust 0 0 2

Changes by domain

Domain Breaking Soft-risk Additive Languages
User 257 python
AsyncUserManagement 198 python
Authorization 146 python
AsyncAuthorization 136 python
Organization 130 python
Connect 83 python
Pipes 70 11 1 dotnet, go, kotlin, php, python, ruby, rust
Directory 62 python
Vault 62 python
AsyncPipes 57 python
DataIntegration 56 1 dotnet, go, php, python, ruby, rust
SSO 40 python
AsyncSSO 38 python
ApiKey 34 python
Group 34 python
AsyncConnect 31 python
AgentRegistration 30 python
AsyncOrganizations 30 python
Radar 29 python
AsyncDirectorySync 28 python
AuditLogs 26 python
AsyncAuditLogs 25 python
AsyncVault 25 python
FeatureFlag 25 python
Invitation 22 python
AsyncOrganizationMembershipService 21 python
CreateUser 21 python
AsyncFeatureFlags 20 python
AsyncMultiFactorAuth 20 python
MultiFactorAuth 20 python
AsyncGroups 19 python
AsyncWebhooks 17 python
Webhooks 17 python
DsyncUserUpdated 15 python
FlagRuleUpdated 14 python
AsyncRadar 13 python
AuthenticationFactor 13 python
UpdateUser 13 python
AsyncApiKeys 12 python
Role 12 python
AuthenticationSSOFailed 11 python
UpdateCustomProviderDefinition 11 python
EventContext 10 python
FlagUpdated 10 python
Profile 10 python
AsyncEvents 9 python
Events 9 python
AuditLogEvent 8 python
AuditLogSchema 8 python
AuthenticateResponse 8 python
AuthenticationSSOTimedOut 8 python
CustomProviderDefinition 8 python
WaitlistUser 8 python
AuditLogExport 7 python
AuthenticationEmailVerificationFailed 7 python
AuthenticationMagicAuthFailed 7 python
AuthenticationMFAFailed 7 python
AuthenticationOAuthFailed 7 python
AuthenticationPasskeyFailed 7 python
AuthenticationPasswordFailed 7 python
AuthenticationRadarRiskDetected 7 python
AuthenticationSSOStarted 7 python
CreateDataIntegration 7 python
UpdateOrganization 7 python
Agents 6 python
AsyncAgents 6 python
AuthenticationSSOSucceeded 6 python
DsyncActivated 6 python
FlagCreated 6 python
PasswordSessionAuthenticateRequest 6 python
UpdateDataIntegration 6 python
ActionAuthenticationDenied 5 python
ActionUserRegistrationDenied 5 python
AdminPortal 5 python
AsyncAdminPortal 5 python
AuditLogConfiguration 5 python
AuthenticationOAuthSucceeded 5 python
CreateMagicCodeAndReturn 5 python
CreateOAuthApplication 5 python
DsyncDeleted 5 python
MagicAuthCodeSessionAuthenticateRequest 5 python
RefreshTokenSessionAuthenticateRequest 5 python
UpdateAuthorizationResource 5 python
AsyncOrganizationDomains 4 python
AsyncWidgets 4 python
AuthenticationEmailVerificationSucceeded 4 python
AuthenticationMagicAuthSucceeded 4 python
AuthenticationMFASucceeded 4 python
AuthenticationPasskeySucceeded 4 python
AuthenticationPasswordSucceeded 4 python
AuthenticationReauthenticationSucceeded 4 python
ConfigureDataIntegrationBody 4 python
CreateAuthorizationResource 4 python
DsyncGroupUpdated 4 python
GenerateLink 4 python
PipeConnectedAccount 4 python
UpdateOAuthApplication 4 python
Widgets 4 python
AssignRole 3 python
AuthenticationChallenge 3 python
AuthorizedConnectApplicationListData 3 python
CheckAuthorization 3 python
CreateOrganizationRole 3 python
DeviceCodeSessionAuthenticateRequest 3 python
DsyncTokenCreated 3 python
EmailVerificationCodeSessionAuthenticateRequest 3 python
EnrollUserAuthenticationFactor 3 python
EventSchema 3 python
MFATotpSessionAuthenticateRequest 3 python
UpdateWebhookEndpoint 3 python
WidgetSessionToken 3 python
AgentAdminLinkClaimAttemptToExternalUserRequest 2 python
AgentAdminValidateCredentialRequest 2 python
AgentCredentialValidation 2 python
ClaimViewResponse 2 python
CreateApplicationSecret 2 python
CreateAuthorizationPermission 2 python
CreateM2MApplication 2 python
CreateOrganizationApiKey 2 python
DeviceAuthorizationResponse 2 python
DsyncGroupCreated 2 python
DsyncGroupDeleted 2 python
DsyncGroupUserAdded 2 python
DsyncGroupUserRemoved 2 python
DsyncTokenRevoked 2 python
DsyncUserCreated 2 python
DsyncUserDeleted 2 python
EmailVerificationCreated 2 python
FlagDeleted 2 python
JwksResponse 2 python
ListMetadata 2 python
MagicAuthCreated 2 python
PasswordResetCreated 2 python
PasswordResetSucceeded 2 python
PermissionCreated 2 python
PermissionDeleted 2 python
PermissionUpdated 2 python
SendRadarSmsChallenge 2 python
SessionCreated 2 python
SessionRevoked 2 python
UpdateAuthorizationPermission 2 python
VersionListResponse 2 python
WebhookEndpoint 2 python
AccessTokenAgentRegistrationCredentialIssuedDataDetail 1 python
ApplicationCredentialsListItem 1 python
AsyncClientApi 1 python
ChallengeAuthenticationFactor 1 python
ClientApi 1 python
CreateDataKeyRequest 1 python
CreateDataKeyResponse 1 python
CreateGroup 1 python
CreateObjectRequest 1 python
CreateWebhookEndpoint 1 python
EmailChangeConfirmation 1 python
EventListListMetadata 1 python
ExpireApiKey 1 python
MagicAuthSendMagicAuthCodeAndReturnResponse 1 python
NewConnectApplicationSecret 1 python
ObjectSummary 1 python
ObjectWithoutValue 1 python
PasswordHashed 1 python
PasswordPlaintext 1 python
RedirectUriInput 1 python
RekeyRequest 1 python
ReplaceGroupRoleAssignments 1 python
ResendUserInviteOptions 1 python
SetRolePermissions 1 python
UpdateObjectRequest 1 python

Breaking (2406)

AccessTokenAgentRegistrationCredentialIssuedDataDetail

Type changes (1)

AccessTokenAgentRegistrationCredentialIssuedDataDetail.expires_at type changed (field)

Language Before After
python
📄 src/workos/common/models/access_token_agent_registration_credential_issued_data_detail.py
AccessTokenAgentRegistrationCredentialIssuedDataDetail.expires_at
type: Union[str, Optional[Literal["null"]]]
AccessTokenAgentRegistrationCredentialIssuedDataDetail.expires_at
type: str | Literal["null"] | None

ActionAuthenticationDenied

Type changes (5)

ActionAuthenticationDenied.context type changed (field)

Language Before After
python
📄 src/workos/common/models/action_authentication_denied.py
ActionAuthenticationDenied.context
type: Optional["EventContext"]
ActionAuthenticationDenied.context
type: EventContext | None

ActionAuthenticationDenied.data type changed (field)

Language Before After
python
📄 src/workos/common/models/action_authentication_denied.py
ActionAuthenticationDenied.data
type: "ActionAuthenticationDeniedData"
ActionAuthenticationDenied.data
type: ActionAuthenticationDeniedData

ActionAuthenticationDeniedData.ip_address type changed (field)

Language Before After
python
📄 src/workos/common/models/action_authentication_denied_data.py
ActionAuthenticationDeniedData.ip_address
type: Optional[str]
ActionAuthenticationDeniedData.ip_address
type: str | None

ActionAuthenticationDeniedData.organization_id type changed (field)

Language Before After
python
📄 src/workos/common/models/action_authentication_denied_data.py
ActionAuthenticationDeniedData.organization_id
type: Optional[str]
ActionAuthenticationDeniedData.organization_id
type: str | None

ActionAuthenticationDeniedData.user_agent type changed (field)

Language Before After
python
📄 src/workos/common/models/action_authentication_denied_data.py
ActionAuthenticationDeniedData.user_agent
type: Optional[str]
ActionAuthenticationDeniedData.user_agent
type: str | None

ActionUserRegistrationDenied

Type changes (5)

ActionUserRegistrationDenied.context type changed (field)

Language Before After
python
📄 src/workos/common/models/action_user_registration_denied.py
ActionUserRegistrationDenied.context
type: Optional["EventContext"]
ActionUserRegistrationDenied.context
type: EventContext | None

ActionUserRegistrationDenied.data type changed (field)

Language Before After
python
📄 src/workos/common/models/action_user_registration_denied.py
ActionUserRegistrationDenied.data
type: "ActionUserRegistrationDeniedData"
ActionUserRegistrationDenied.data
type: ActionUserRegistrationDeniedData

ActionUserRegistrationDeniedData.ip_address type changed (field)

Language Before After
python
📄 src/workos/common/models/action_user_registration_denied_data.py
ActionUserRegistrationDeniedData.ip_address
type: Optional[str]
ActionUserRegistrationDeniedData.ip_address
type: str | None

ActionUserRegistrationDeniedData.organization_id type changed (field)

Language Before After
python
📄 src/workos/common/models/action_user_registration_denied_data.py
ActionUserRegistrationDeniedData.organization_id
type: Optional[str]
ActionUserRegistrationDeniedData.organization_id
type: str | None

ActionUserRegistrationDeniedData.user_agent type changed (field)

Language Before After
python
📄 src/workos/common/models/action_user_registration_denied_data.py
ActionUserRegistrationDeniedData.user_agent
type: Optional[str]
ActionUserRegistrationDeniedData.user_agent
type: str | None

AdminPortal

Parameter changes (5)

Method Changes Languages
AdminPortal.generate_link return_url type: Optional[str]str | None; success_url type: Optional[str]str | None; intent type: Optional[Union[GenerateLinkIntent, str]]GenerateLinkIntent | str | None; it_contact_emails type: Optional[List[str]]list[str] | None; request_options type: Optional[RequestOptions]RequestOptions | None python

AgentAdminLinkClaimAttemptToExternalUserRequest

Type changes (2)

AgentAdminLinkClaimAttemptToExternalUserRequest.organization_id type changed (field)

Language Before After
python
📄 src/workos/agents/models/agent_admin_link_claim_attempt_to_external_user_request.py
AgentAdminLinkClaimAttemptToExternalUserRequest.organization_id
type: Optional[str]
AgentAdminLinkClaimAttemptToExternalUserRequest.organization_id
type: str | None

AgentAdminLinkClaimAttemptToExternalUserRequest.user type changed (field)

Language Before After
python
📄 src/workos/agents/models/agent_admin_link_claim_attempt_to_external_user_request.py
AgentAdminLinkClaimAttemptToExternalUserRequest.user
type: "AgentAdminLinkClaimAttemptToExternalUserRequestUser"
AgentAdminLinkClaimAttemptToExternalUserRequest.user
type: AgentAdminLinkClaimAttemptToExternalUserRequestUser

AgentAdminValidateCredentialRequest

Type changes (2)

AgentAdminValidateCredentialRequest.audience type changed (field)

Language Before After
python
📄 src/workos/agents/models/agent_admin_validate_credential_request.py
AgentAdminValidateCredentialRequest.audience
type: Optional[str]
AgentAdminValidateCredentialRequest.audience
type: str | None

AgentAdminValidateCredentialRequest.type type changed (field)

Language Before After
python
📄 src/workos/agents/models/agent_admin_validate_credential_request.py
AgentAdminValidateCredentialRequest.type
type: "AgentAdminValidateCredentialRequestType"
AgentAdminValidateCredentialRequest.type
type: AgentAdminValidateCredentialRequestType

AgentCredentialValidation

Type changes (2)

AgentCredentialValidation.expires_at type changed (field)

Language Before After
python
📄 src/workos/agents/models/agent_credential_validation.py
AgentCredentialValidation.expires_at
type: Optional[datetime]
AgentCredentialValidation.expires_at
type: datetime | None

AgentCredentialValidation.registration_id type changed (field)

Language Before After
python
📄 src/workos/agents/models/agent_credential_validation.py
AgentCredentialValidation.registration_id
type: Optional[str]
AgentCredentialValidation.registration_id
type: str | None

AgentRegistration

Type changes (30)

AgentRegistration.agent_identity type changed (field)

Language Before After
python
📄 src/workos/agents/models/agent_registration.py
AgentRegistration.agent_identity
type: "AgentRegistrationAgentIdentity"
AgentRegistration.agent_identity
type: AgentRegistrationAgentIdentity

AgentRegistration.claim type changed (field)

Language Before After
python
📄 src/workos/agents/models/agent_registration.py
AgentRegistration.claim
type: Optional["AgentRegistrationClaim"]
AgentRegistration.claim
type: AgentRegistrationClaim | None

AgentRegistration.kind type changed (field)

Language Before After
python
📄 src/workos/agents/models/agent_registration.py
AgentRegistration.kind
type: "AgentRegistrationKind"
AgentRegistration.kind
type: AgentRegistrationKind

AgentRegistration.status type changed (field)

Language Before After
python
📄 src/workos/agents/models/agent_registration.py
AgentRegistration.status
type: "AgentRegistrationStatus"
AgentRegistration.status
type: AgentRegistrationStatus

AgentRegistrationAgentIdentity.userland_user_id type changed (field)

Language Before After
python
📄 src/workos/agents/models/agent_registration_agent_identity.py
AgentRegistrationAgentIdentity.userland_user_id
type: Optional[str]
AgentRegistrationAgentIdentity.userland_user_id
type: str | None

AgentRegistrationClaim.claim_completion type changed (field)

Language Before After
python
📄 src/workos/agents/models/agent_registration_claim.py
AgentRegistrationClaim.claim_completion
type: Optional["AgentRegistrationClaimClaimCompletion"]
AgentRegistrationClaim.claim_completion
type: AgentRegistrationClaimClaimCompletion | None

AgentRegistrationClaimAttemptCreated.context type changed (field)

Language Before After
python
📄 src/workos/common/models/agent_registration_claim_attempt_created.py
AgentRegistrationClaimAttemptCreated.context
type: Optional["EventContext"]
AgentRegistrationClaimAttemptCreated.context
type: EventContext | None

AgentRegistrationClaimAttemptCreated.data type changed (field)

Language Before After
python
📄 src/workos/common/models/agent_registration_claim_attempt_created.py
AgentRegistrationClaimAttemptCreated.data
type: "AgentRegistrationClaimAttemptCreatedData"
AgentRegistrationClaimAttemptCreated.data
type: AgentRegistrationClaimAttemptCreatedData

AgentRegistrationClaimCompleted.context type changed (field)

Language Before After
python
📄 src/workos/common/models/agent_registration_claim_completed.py
AgentRegistrationClaimCompleted.context
type: Optional["EventContext"]
AgentRegistrationClaimCompleted.context
type: EventContext | None

AgentRegistrationClaimCompleted.data type changed (field)

Language Before After
python
📄 src/workos/common/models/agent_registration_claim_completed.py
AgentRegistrationClaimCompleted.data
type: "AgentRegistrationClaimCompletedData"
AgentRegistrationClaimCompleted.data
type: AgentRegistrationClaimCompletedData

AgentRegistrationClaimCompletedData.claimed_by type changed (field)

Language Before After
python
📄 src/workos/common/models/agent_registration_claim_completed_data.py
AgentRegistrationClaimCompletedData.claimed_by
type: "AgentRegistrationClaimCompletedDataClaimedBy"
AgentRegistrationClaimCompletedData.claimed_by
type: AgentRegistrationClaimCompletedDataClaimedBy

AgentRegistrationClaimCompletedDataClaimedBy.organization_id type changed (field)

Language Before After
python
📄 src/workos/common/models/agent_registration_claim_completed_data_claimed_by.py
AgentRegistrationClaimCompletedDataClaimedBy.organization_id
type: Union[str, Optional[Literal["null"]]]
AgentRegistrationClaimCompletedDataClaimedBy.organization_id
type: str | Literal["null"] | None

AgentRegistrationCreated.context type changed (field)

Language Before After
python
📄 src/workos/common/models/agent_registration_created.py
AgentRegistrationCreated.context
type: Optional["EventContext"]
AgentRegistrationCreated.context
type: EventContext | None

AgentRegistrationCreated.data type changed (field)

Language Before After
python
📄 src/workos/common/models/agent_registration_created.py
AgentRegistrationCreated.data
type: "AgentRegistrationCreatedData"
AgentRegistrationCreated.data
type: AgentRegistrationCreatedData

AgentRegistrationCreatedData.agent_identity type changed (field)

Language Before After
python
📄 src/workos/common/models/agent_registration_created_data.py
AgentRegistrationCreatedData.agent_identity
type: "AgentRegistrationCreatedDataAgentIdentity"
AgentRegistrationCreatedData.agent_identity
type: AgentRegistrationCreatedDataAgentIdentity

AgentRegistrationCreatedData.kind type changed (field)

Language Before After
python
📄 src/workos/common/models/agent_registration_created_data.py
AgentRegistrationCreatedData.kind
type: "AgentRegistrationCreatedDataKind"
AgentRegistrationCreatedData.kind
type: AgentRegistrationCreatedDataKind

AgentRegistrationCreatedData.method type changed (field)

Language Before After
python
📄 src/workos/common/models/agent_registration_created_data.py
AgentRegistrationCreatedData.method
type: "AgentRegistrationCreatedDataMethod"
AgentRegistrationCreatedData.method
type: AgentRegistrationCreatedDataMethod

AgentRegistrationCreatedData.status type changed (field)

Language Before After
python
📄 src/workos/common/models/agent_registration_created_data.py
AgentRegistrationCreatedData.status
type: "AgentRegistrationCreatedDataStatus"
AgentRegistrationCreatedData.status
type: AgentRegistrationCreatedDataStatus

AgentRegistrationCreatedDataAgentIdentity.userland_user_id type changed (field)

Language Before After
python
📄 src/workos/common/models/agent_registration_created_data_agent_identity.py
AgentRegistrationCreatedDataAgentIdentity.userland_user_id
type: Union[str, Optional[Literal["null"]]]
AgentRegistrationCreatedDataAgentIdentity.userland_user_id
type: str | Literal["null"] | None

AgentRegistrationCredentialIssued.context type changed (field)

Language Before After
python
📄 src/workos/common/models/agent_registration_credential_issued.py
AgentRegistrationCredentialIssued.context
type: Optional["EventContext"]
AgentRegistrationCredentialIssued.context
type: EventContext | None

AgentRegistrationCredentialIssued.data type changed (field)

Language Before After
python
📄 src/workos/common/models/agent_registration_credential_issued.py
AgentRegistrationCredentialIssued.data
type: "AgentRegistrationCredentialIssuedData"
AgentRegistrationCredentialIssued.data
type: AgentRegistrationCredentialIssuedData

AgentRegistrationCredentialIssuedData.detail type changed (field)

Language Before After
python
📄 src/workos/common/models/agent_registration_credential_issued_data.py
AgentRegistrationCredentialIssuedData.detail
type: Union[<br> "AgentRegistrationCredentialIssuedDataDetail",<br> "AccessTokenAgentRegistrationCredentialIssuedDataDetail",<br> ]
AgentRegistrationCredentialIssuedData.detail
type: (<br> AgentRegistrationCredentialIssuedDataDetail<br> | AccessTokenAgentRegistrationCredentialIssuedDataDetail<br> )

AgentRegistrationDeleted.context type changed (field)

Language Before After
python
📄 src/workos/common/models/agent_registration_deleted.py
AgentRegistrationDeleted.context
type: Optional["EventContext"]
AgentRegistrationDeleted.context
type: EventContext | None

AgentRegistrationDeleted.data type changed (field)

Language Before After
python
📄 src/workos/common/models/agent_registration_deleted.py
AgentRegistrationDeleted.data
type: "AgentRegistrationDeletedData"
AgentRegistrationDeleted.data
type: AgentRegistrationDeletedData

AgentRegistrationExpired.context type changed (field)

Language Before After
python
📄 src/workos/common/models/agent_registration_expired.py
AgentRegistrationExpired.context
type: Optional["EventContext"]
AgentRegistrationExpired.context
type: EventContext | None

AgentRegistrationExpired.data type changed (field)

Language Before After
python
📄 src/workos/common/models/agent_registration_expired.py
AgentRegistrationExpired.data
type: "AgentRegistrationExpiredData"
AgentRegistrationExpired.data
type: AgentRegistrationExpiredData

AgentRegistrationOrganizationSwitched.context type changed (field)

Language Before After
python
📄 src/workos/common/models/agent_registration_organization_switched.py
AgentRegistrationOrganizationSwitched.context
type: Optional["EventContext"]
AgentRegistrationOrganizationSwitched.context
type: EventContext | None

AgentRegistrationOrganizationSwitched.data type changed (field)

Language Before After
python
📄 src/workos/common/models/agent_registration_organization_switched.py
AgentRegistrationOrganizationSwitched.data
type: "AgentRegistrationOrganizationSwitchedData"
AgentRegistrationOrganizationSwitched.data
type: AgentRegistrationOrganizationSwitchedData

AgentRegistrationRevoked.context type changed (field)

Language Before After
python
📄 src/workos/common/models/agent_registration_revoked.py
AgentRegistrationRevoked.context
type: Optional["EventContext"]
AgentRegistrationRevoked.context
type: EventContext | None

AgentRegistrationRevoked.data type changed (field)

Language Before After
python
📄 src/workos/common/models/agent_registration_revoked.py
AgentRegistrationRevoked.data
type: "AgentRegistrationRevokedData"
AgentRegistrationRevoked.data
type: AgentRegistrationRevokedData

Agents

Parameter changes (6)

Method Changes Languages
Agents.create_validate type type: Union[AgentAdminValidateCredentialRequestType, str]AgentAdminValidateCredentialRequestType | str; audience type: Optional[str]str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
Agents.get_registration request_options type: Optional[RequestOptions]RequestOptions | None python
Agents.update_attempts organization_id type: Optional[str]str | None; request_options type: Optional[RequestOptions]RequestOptions | None python

ApiKey

Parameter changes (12)

Method Changes Languages
ApiKeys.create_api_key_expire expires_at type: Union[str, None, NotGiven]str | None | NotGiven; request_options type: Optional[RequestOptions]RequestOptions | None python
ApiKeys.create_organization_api_key permissions type: Optional[List[str]]list[str] | None; expires_at type: Optional[str]str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
ApiKeys.create_validation request_options type: Optional[RequestOptions]RequestOptions | None python
ApiKeys.delete_api_key request_options type: Optional[RequestOptions]RequestOptions | None python
ApiKeys.list_organization_api_keys limit type: Optional[int]int | None; before type: Optional[str]str | None; after type: Optional[str]str | None; order type: Optional[Union[PaginationOrder, str]]PaginationOrder | str | None; request_options type: Optional[RequestOptions]RequestOptions | None python

Type changes (22)

ApiKey.expires_at type changed (field)

Language Before After
python
📄 src/workos/api_keys/models/api_key.py
ApiKey.expires_at
type: Optional[datetime]
ApiKey.expires_at
type: datetime | None

ApiKey.last_used_at type changed (field)

Language Before After
python
📄 src/workos/api_keys/models/api_key.py
ApiKey.last_used_at
type: Optional[datetime]
ApiKey.last_used_at
type: datetime | None

ApiKey.owner type changed (field)

Language Before After
python
📄 src/workos/api_keys/models/api_key.py
ApiKey.owner
type: Union["ApiKeyOwner", "UserApiKeyOwner"]
ApiKey.owner
type: ApiKeyOwner | UserApiKeyOwner

ApiKey.permissions type changed (field)

Language Before After
python
📄 src/workos/api_keys/models/api_key.py
ApiKey.permissions
type: List[str]
ApiKey.permissions
type: list[str]

ApiKeyCreated.context type changed (field)

Language Before After
python
📄 src/workos/common/models/api_key_created.py
ApiKeyCreated.context
type: Optional["EventContext"]
ApiKeyCreated.context
type: EventContext | None

ApiKeyCreated.data type changed (field)

Language Before After
python
📄 src/workos/common/models/api_key_created.py
ApiKeyCreated.data
type: "ApiKeyCreatedData"
ApiKeyCreated.data
type: ApiKeyCreatedData

ApiKeyCreatedData.expires_at type changed (field)

Language Before After
python
📄 src/workos/common/models/api_key_created_data.py
ApiKeyCreatedData.expires_at
type: Optional[datetime]
ApiKeyCreatedData.expires_at
type: datetime | None

ApiKeyCreatedData.last_used_at type changed (field)

Language Before After
python
📄 src/workos/common/models/api_key_created_data.py
ApiKeyCreatedData.last_used_at
type: Optional[str]
ApiKeyCreatedData.last_used_at
type: str | None

ApiKeyCreatedData.owner type changed (field)

Language Before After
python
📄 src/workos/common/models/api_key_created_data.py
ApiKeyCreatedData.owner
type: Union["ApiKeyCreatedDataOwner", "UserApiKeyCreatedDataOwner"]
ApiKeyCreatedData.owner
type: ApiKeyCreatedDataOwner | UserApiKeyCreatedDataOwner

ApiKeyCreatedData.permissions type changed (field)

Language Before After
python
📄 src/workos/common/models/api_key_created_data.py
ApiKeyCreatedData.permissions
type: List[str]
ApiKeyCreatedData.permissions
type: list[str]

ApiKeyRevoked.context type changed (field)

Language Before After
python
📄 src/workos/common/models/api_key_revoked.py
ApiKeyRevoked.context
type: Optional["EventContext"]
ApiKeyRevoked.context
type: EventContext | None

ApiKeyRevoked.data type changed (field)

Language Before After
python
📄 src/workos/common/models/api_key_revoked.py
ApiKeyRevoked.data
type: "ApiKeyRevokedData"
ApiKeyRevoked.data
type: ApiKeyRevokedData

ApiKeyUpdated.context type changed (field)

Language Before After
python
📄 src/workos/common/models/api_key_updated.py
ApiKeyUpdated.context
type: Optional["EventContext"]
ApiKeyUpdated.context
type: EventContext | None

ApiKeyUpdated.data type changed (field)

Language Before After
python
📄 src/workos/common/models/api_key_updated.py
ApiKeyUpdated.data
type: "ApiKeyUpdatedData"
ApiKeyUpdated.data
type: ApiKeyUpdatedData

ApiKeyUpdatedData.expires_at type changed (field)

Language Before After
python
📄 src/workos/common/models/api_key_updated_data.py
ApiKeyUpdatedData.expires_at
type: Optional[datetime]
ApiKeyUpdatedData.expires_at
type: datetime | None

ApiKeyUpdatedData.last_used_at type changed (field)

Language Before After
python
📄 src/workos/common/models/api_key_updated_data.py
ApiKeyUpdatedData.last_used_at
type: Optional[str]
ApiKeyUpdatedData.last_used_at
type: str | None

ApiKeyUpdatedData.owner type changed (field)

Language Before After
python
📄 src/workos/common/models/api_key_updated_data.py
ApiKeyUpdatedData.owner
type: Union["ApiKeyUpdatedDataOwner", "UserApiKeyUpdatedDataOwner"]
ApiKeyUpdatedData.owner
type: ApiKeyUpdatedDataOwner | UserApiKeyUpdatedDataOwner

ApiKeyUpdatedData.permissions type changed (field)

Language Before After
python
📄 src/workos/common/models/api_key_updated_data.py
ApiKeyUpdatedData.permissions
type: List[str]
ApiKeyUpdatedData.permissions
type: list[str]

ApiKeyUpdatedData.previous_attributes type changed (field)

Language Before After
python
📄 src/workos/common/models/api_key_updated_data.py
ApiKeyUpdatedData.previous_attributes
type: "ApiKeyUpdatedDataPreviousAttribute"
ApiKeyUpdatedData.previous_attributes
type: ApiKeyUpdatedDataPreviousAttribute

ApiKeyUpdatedDataPreviousAttribute.expires_at type changed (field)

Language Before After
python
📄 src/workos/common/models/api_key_updated_data_previous_attribute.py
ApiKeyUpdatedDataPreviousAttribute.expires_at
type: Optional[datetime]
ApiKeyUpdatedDataPreviousAttribute.expires_at
type: datetime | None

ApiKeyValidationResponse.agent_registration_id type changed (field)

Language Before After
python
📄 src/workos/api_keys/models/api_key_validation_response.py
ApiKeyValidationResponse.agent_registration_id
type: Optional[str]
ApiKeyValidationResponse.agent_registration_id
type: str | None

ApiKeyValidationResponse.api_key type changed (field)

Language Before After
python
📄 src/workos/api_keys/models/api_key_validation_response.py
ApiKeyValidationResponse.api_key
type: Optional["ApiKey"]
ApiKeyValidationResponse.api_key
type: ApiKey | None

ApplicationCredentialsListItem

Type changes (1)

ApplicationCredentialsListItem.last_used_at type changed (field)

Language Before After
python
📄 src/workos/connect/models/application_credentials_list_item.py
ApplicationCredentialsListItem.last_used_at
type: Optional[datetime]
ApplicationCredentialsListItem.last_used_at
type: datetime | None

AssignRole

Type changes (3)

AssignRole.resource_external_id type changed (field)

Language Before After
python
📄 src/workos/authorization/models/assign_role.py
AssignRole.resource_external_id
type: Optional[str]
AssignRole.resource_external_id
type: str | None

AssignRole.resource_id type changed (field)

Language Before After
python
📄 src/workos/authorization/models/assign_role.py
AssignRole.resource_id
type: Optional[str]
AssignRole.resource_id
type: str | None

AssignRole.resource_type_slug type changed (field)

Language Before After
python
📄 src/workos/authorization/models/assign_role.py
AssignRole.resource_type_slug
type: Optional[str]
AssignRole.resource_type_slug
type: str | None

AsyncAdminPortal

Parameter changes (5)

Method Changes Languages
AsyncAdminPortal.generate_link return_url type: Optional[str]str | None; success_url type: Optional[str]str | None; intent type: Optional[Union[GenerateLinkIntent, str]]GenerateLinkIntent | str | None; it_contact_emails type: Optional[List[str]]list[str] | None; request_options type: Optional[RequestOptions]RequestOptions | None python

AsyncAgents

Parameter changes (6)

Method Changes Languages
AsyncAgents.create_validate type type: Union[AgentAdminValidateCredentialRequestType, str]AgentAdminValidateCredentialRequestType | str; audience type: Optional[str]str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAgents.get_registration request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAgents.update_attempts organization_id type: Optional[str]str | None; request_options type: Optional[RequestOptions]RequestOptions | None python

AsyncApiKeys

Parameter changes (12)

Method Changes Languages
AsyncApiKeys.create_api_key_expire expires_at type: Union[str, None, NotGiven]str | None | NotGiven; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncApiKeys.create_organization_api_key permissions type: Optional[List[str]]list[str] | None; expires_at type: Optional[str]str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncApiKeys.create_validation request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncApiKeys.delete_api_key request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncApiKeys.list_organization_api_keys limit type: Optional[int]int | None; before type: Optional[str]str | None; after type: Optional[str]str | None; order type: Optional[Union[PaginationOrder, str]]PaginationOrder | str | None; request_options type: Optional[RequestOptions]RequestOptions | None python

AsyncAuditLogs

Parameter changes (25)

Method Changes Languages
AsyncAuditLogs.create_event idempotency_key type: Optional[str]str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuditLogs.create_export actions type: Optional[List[str]]list[str] | None; actors type: Optional[List[str]]list[str] | None; actor_names type: Optional[List[str]]list[str] | None; actor_ids type: Optional[List[str]]list[str] | None; targets type: Optional[List[str]]list[str] | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuditLogs.create_schema targets type: List[AuditLogSchemaTargetInput]list[AuditLogSchemaTargetInput]; actor type: Optional[AuditLogSchemaActorInput]AuditLogSchemaActorInput | None; metadata type: Optional[Dict[str, Any]]dict[str, Any] | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuditLogs.get_export request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuditLogs.get_organization_audit_logs_retention request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuditLogs.list_action_schemas limit type: Optional[int]int | None; before type: Optional[str]str | None; after type: Optional[str]str | None; order type: Optional[Union[PaginationOrder, str]]PaginationOrder | str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuditLogs.list_actions limit type: Optional[int]int | None; before type: Optional[str]str | None; after type: Optional[str]str | None; order type: Optional[Union[PaginationOrder, str]]PaginationOrder | str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuditLogs.update_organization_audit_logs_retention request_options type: Optional[RequestOptions]RequestOptions | None python

AsyncAuthorization

Parameter changes (136)

Method Changes Languages
AsyncAuthorization.add_environment_role_permission request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.add_organization_role_permission request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.assign_role resource_target type: Union[ResourceTargetById, ResourceTargetByExternalId]ResourceTargetById | ResourceTargetByExternalId; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.check resource_target type: Union[ResourceTargetById, ResourceTargetByExternalId]ResourceTargetById | ResourceTargetByExternalId; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.create_environment_role description type: Union[str, None, NotGiven]str | None | NotGiven; resource_type_slug type: Optional[str]str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.create_group_role_assignment resource_id type: Optional[str]str | None; resource_external_id type: Optional[str]str | None; resource_type_slug type: Optional[str]str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.create_organization_role slug type: Optional[str]str | None; description type: Union[str, None, NotGiven]str | None | NotGiven; resource_type_slug type: Optional[str]str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.create_permission description type: Union[str, None, NotGiven]str | None | NotGiven; resource_type_slug type: Optional[str]str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.create_resource description type: Union[str, None, NotGiven]str | None | NotGiven; parent_resource type: Optional[<br> Union[ParentResourceById, ParentResourceByExternalId]<br> ]ParentResourceById | ParentResourceByExternalId | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.delete_group_role_assignment request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.delete_group_role_assignments resource_id type: Optional[str]str | None; resource_external_id type: Optional[str]str | None; resource_type_slug type: Optional[str]str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.delete_organization_role request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.delete_permission request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.delete_resource cascade_delete type: Optional[bool]bool | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.delete_resource_by_external_id cascade_delete type: Optional[bool]bool | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.get_environment_role request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.get_group_role_assignment request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.get_organization_role request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.get_permission request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.get_resource request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.get_resource_by_external_id request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.list_effective_permissions limit type: Optional[int]int | None; before type: Optional[str]str | None; after type: Optional[str]str | None; order type: Optional[Union[PaginationOrder, str]]PaginationOrder | str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.list_effective_permissions_by_external_id limit type: Optional[int]int | None; before type: Optional[str]str | None; after type: Optional[str]str | None; order type: Optional[Union[PaginationOrder, str]]PaginationOrder | str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.list_environment_roles request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.list_group_role_assignments limit type: Optional[int]int | None; before type: Optional[str]str | None; after type: Optional[str]str | None; order type: Optional[Union[PaginationOrder, str]]PaginationOrder | str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.list_memberships_for_resource limit type: Optional[int]int | None; before type: Optional[str]str | None; after type: Optional[str]str | None; order type: Optional[Union[PaginationOrder, str]]PaginationOrder | str | None; assignment type: Optional[Union[AuthorizationAssignment, str]]AuthorizationAssignment | str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.list_memberships_for_resource_by_external_id limit type: Optional[int]int | None; before type: Optional[str]str | None; after type: Optional[str]str | None; order type: Optional[Union[PaginationOrder, str]]PaginationOrder | str | None; assignment type: Optional[Union[AuthorizationAssignment, str]]AuthorizationAssignment | str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.list_organization_roles request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.list_permissions limit type: Optional[int]int | None; before type: Optional[str]str | None; after type: Optional[str]str | None; order type: Optional[Union[PaginationOrder, str]]PaginationOrder | str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.list_resources limit type: Optional[int]int | None; before type: Optional[str]str | None; after type: Optional[str]str | None; order type: Optional[Union[PaginationOrder, str]]PaginationOrder | str | None; organization_id type: Optional[str]str | None; resource_type_slug type: Optional[str]str | None; resource_external_id type: Optional[str]str | None; parent type: Optional[Union[ParentById, ParentByExternalId]]ParentById | ParentByExternalId | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.list_resources_for_membership limit type: Optional[int]int | None; before type: Optional[str]str | None; after type: Optional[str]str | None; order type: Optional[Union[PaginationOrder, str]]PaginationOrder | str | None; parent_resource type: Union[ParentResourceById, ParentResourceByExternalId]ParentResourceById | ParentResourceByExternalId; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.list_role_assignments limit type: Optional[int]int | None; before type: Optional[str]str | None; after type: Optional[str]str | None; order type: Optional[Union[PaginationOrder, str]]PaginationOrder | str | None; resource_id type: Optional[str]str | None; resource_external_id type: Optional[str]str | None; resource_type_slug type: Optional[str]str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.list_role_assignments_for_resource limit type: Optional[int]int | None; before type: Optional[str]str | None; after type: Optional[str]str | None; order type: Optional[Union[PaginationOrder, str]]PaginationOrder | str | None; role_slug type: Optional[str]str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.list_role_assignments_for_resource_by_external_id limit type: Optional[int]int | None; before type: Optional[str]str | None; after type: Optional[str]str | None; order type: Optional[Union[PaginationOrder, str]]PaginationOrder | str | None; role_slug type: Optional[str]str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.remove_organization_role_permission request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.remove_role resource_target type: Union[ResourceTargetById, ResourceTargetByExternalId]ResourceTargetById | ResourceTargetByExternalId; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.remove_role_assignment request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.set_environment_role_permissions permissions type: List[str]list[str]; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.set_organization_role_permissions permissions type: List[str]list[str]; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.update_environment_role name type: Optional[str]str | None; description type: Union[str, None, NotGiven]str | None | NotGiven; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.update_group_role_assignments role_assignments type: List[ReplaceGroupRoleAssignmentEntry]list[ReplaceGroupRoleAssignmentEntry]; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.update_organization_role name type: Optional[str]str | None; description type: Union[str, None, NotGiven]str | None | NotGiven; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.update_permission name type: Optional[str]str | None; description type: Union[str, None, NotGiven]str | None | NotGiven; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.update_resource name type: Optional[str]str | None; description type: Union[str, None, NotGiven]str | None | NotGiven; parent_resource type: Optional[<br> Union[ParentResourceById, ParentResourceByExternalId]<br> ]ParentResourceById | ParentResourceByExternalId | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncAuthorization.update_resource_by_external_id name type: Optional[str]str | None; description type: Union[str, None, NotGiven]str | None | NotGiven; parent_resource type: Optional[<br> Union[ParentResourceById, ParentResourceByExternalId]<br> ]ParentResourceById | ParentResourceByExternalId | None; request_options type: Optional[RequestOptions]RequestOptions | None python

AsyncClientApi

Parameter changes (1)

Method Changes Languages
AsyncClientApi.create_token request_options type: Optional[RequestOptions]RequestOptions | None python

AsyncConnect

Parameter changes (30)

Method Changes Languages
AsyncConnect.complete_oauth2 user_consent_options type: Optional[List[UserConsentOption]]list[UserConsentOption] | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncConnect.create_application body type: Union[CreateOAuthApplication, CreateM2MApplication, Dict[str, Any]]CreateOAuthApplication | CreateM2MApplication | dict[str, Any]; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncConnect.create_application_client_secret request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncConnect.create_m2m_application description type: Optional[str]str | None; scopes type: Optional[List[str]]list[str] | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncConnect.create_oauth_application description type: Optional[str]str | None; scopes type: Optional[List[str]]list[str] | None; redirect_uris type: Optional[List[RedirectUriInput]]list[RedirectUriInput] | None; uses_pkce type: Optional[bool]bool | None; organization_id type: Optional[str]str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncConnect.delete_application request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncConnect.delete_client_secret request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncConnect.get_application request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncConnect.list_application_client_secrets request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncConnect.list_applications limit type: Optional[int]int | None; before type: Optional[str]str | None; after type: Optional[str]str | None; order type: Optional[Union[PaginationOrder, str]]PaginationOrder | str | None; registration_types type: Optional[<br> List[Union[ApplicationsRegistrationTypes, str]]<br> ]list[ApplicationsRegistrationTypes | str] | None; organization_id type: Optional[str]str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncConnect.update_application name type: Optional[str]str | None; description type: Union[str, None, NotGiven]str | None | NotGiven; scopes type: Union[List[str], None, NotGiven]list[str] | None | NotGiven; redirect_uris type: Union[List[RedirectUriInput], None, NotGiven]list[RedirectUriInput] | None | NotGiven; request_options type: Optional[RequestOptions]RequestOptions | None python

Type changes (1)

AsyncConnect.list_application_client_secrets return type changed (function)

Language Before After
python
📄 src/workos/connect/_resource.py
AsyncConnect.list_application_client_secrets(id, request_options?)
returnType: List[ApplicationCredentialsListItem]
AsyncConnect.list_application_client_secrets(id, request_options?)
returnType: list[ApplicationCredentialsListItem]

AsyncDirectorySync

Parameter changes (28)

Method Changes Languages
AsyncDirectorySync.delete_directory request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncDirectorySync.get_directory request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncDirectorySync.get_group request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncDirectorySync.get_user request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncDirectorySync.list_directories limit type: Optional[int]int | None; before type: Optional[str]str | None; after type: Optional[str]str | None; order type: Optional[Union[PaginationOrder, str]]PaginationOrder | str | None; organization_id type: Optional[str]str | None; search type: Optional[str]str | None; domain type: Optional[str]str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncDirectorySync.list_groups limit type: Optional[int]int | None; before type: Optional[str]str | None; after type: Optional[str]str | None; order type: Optional[Union[PaginationOrder, str]]PaginationOrder | str | None; directory type: Optional[str]str | None; user type: Optional[str]str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncDirectorySync.list_users limit type: Optional[int]int | None; before type: Optional[str]str | None; after type: Optional[str]str | None; order type: Optional[Union[PaginationOrder, str]]PaginationOrder | str | None; directory type: Optional[str]str | None; group type: Optional[str]str | None; idp_id type: Optional[str]str | None; email type: Optional[str]str | None; request_options type: Optional[RequestOptions]RequestOptions | None python

AsyncEvents

Parameter changes (9)

Method Changes Languages
AsyncEvents.list_events limit type: Optional[int]int | None; before type: Optional[str]str | None; after type: Optional[str]str | None; order type: Optional[Union[PaginationOrder, str]]PaginationOrder | str | None; events type: Optional[List[str]]list[str] | None; range_start type: Optional[str]str | None; range_end type: Optional[str]str | None; organization_id type: Optional[str]str | None; request_options type: Optional[RequestOptions]RequestOptions | None python

AsyncFeatureFlags

Parameter changes (20)

Method Changes Languages
AsyncFeatureFlags.add_flag_target request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncFeatureFlags.disable_feature_flag request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncFeatureFlags.enable_feature_flag request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncFeatureFlags.get_feature_flag request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncFeatureFlags.list_feature_flags limit type: Optional[int]int | None; before type: Optional[str]str | None; after type: Optional[str]str | None; order type: Optional[Union[PaginationOrder, str]]PaginationOrder | str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncFeatureFlags.list_organization_feature_flags limit type: Optional[int]int | None; before type: Optional[str]str | None; after type: Optional[str]str | None; order type: Optional[Union[PaginationOrder, str]]PaginationOrder | str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncFeatureFlags.list_user_feature_flags limit type: Optional[int]int | None; before type: Optional[str]str | None; after type: Optional[str]str | None; order type: Optional[Union[PaginationOrder, str]]PaginationOrder | str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncFeatureFlags.remove_flag_target request_options type: Optional[RequestOptions]RequestOptions | None python

AsyncGroups

Parameter changes (19)

Method Changes Languages
AsyncGroups.create_group_organization_membership request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncGroups.create_organization_group description type: Union[str, None, NotGiven]str | None | NotGiven; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncGroups.delete_group_organization_membership request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncGroups.delete_organization_group request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncGroups.get_organization_group request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncGroups.list_group_organization_memberships limit type: Optional[int]int | None; before type: Optional[str]str | None; after type: Optional[str]str | None; order type: Optional[Union[PaginationOrder, str]]PaginationOrder | str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncGroups.list_organization_groups limit type: Optional[int]int | None; before type: Optional[str]str | None; after type: Optional[str]str | None; order type: Optional[Union[PaginationOrder, str]]PaginationOrder | str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncGroups.update_organization_group name type: Optional[str]str | None; description type: Union[str, None, NotGiven]str | None | NotGiven; request_options type: Optional[RequestOptions]RequestOptions | None python

AsyncMultiFactorAuth

Parameter changes (20)

Method Changes Languages
AsyncMultiFactorAuth.challenge_factor sms_template type: Optional[str]str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncMultiFactorAuth.create_user_auth_factor totp_issuer type: Optional[str]str | None; totp_user type: Optional[str]str | None; totp_secret type: Optional[str]str | None; request_options type: Optional[RequestOptions]RequestOptions | None python
AsyncMultiFactorAuth.delete_factor request_options type: Optional[RequestOptions]RequestOptions | None python
> [!NOTE] > This report was truncated because it exceeded GitHub's 65,536-character comment limit. See [the full SDK diff report](https://workos.github.io/openapi-spec/pr-77/sdk-diff-report.html) for the complete details.

gjtorikian and others added 2 commits July 26, 2026 11:21
Changelog scope validation hard-failed on PR #77 because a compat surface
change (return_url param type changed on AdminPortal.generate_link)
resolved to the sdk fallback scope, which has no docs_url.

factsFromCompat distrusts a service scope that is merely the snake_case of
the service name and defers to scopeFromName, which had no AdminPortal
rule and returned sdk. Add the missing rule so AdminPortal resolves to
admin_portal (a scope with a docs_url), matching every other service
family in the list.

Export factsFromCompat and add a regression test covering the resolution.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…lientApi, Connect)

The AdminPortal fix exposed the next hidden sdk-resolving symbols: the
per-scope dedup in factsFromCompat means CI only ever names one at a time.
Simulated all breaking compat symbols across every language SDK at once
(merged compat reports + --strict-scopes) to find the full set:

- Agents.*            -> new `agents` scope (label + docs_url reference/agents)
- Authorization.*     -> authorization (registered scope, same class as AdminPortal)
- ClientApi.create_token -> client (/client/token issuance)
- CreateApplicationSecret / NewConnectApplicationSecret -> connect

--strict-scopes now exits 0 against the merged compat report for all 8 SDKs.
Broadened the factsFromCompat regression test to a table covering each root.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@gjtorikian
gjtorikian merged commit 4de384e into main Jul 26, 2026
12 of 13 checks passed
@gjtorikian
gjtorikian deleted the update-spec-20260724-190038-30119064196 branch July 26, 2026 15:43
github-actions Bot added a commit that referenced this pull request Jul 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Development

Successfully merging this pull request may close these issues.

1 participant