Operations 4
Documentation
Documentation
https://workos.com/docs
APIReference
https://workos.com/docs/reference
RateLimits
https://workos.com/docs/reference/rate-limits
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/workos:workos-webhooks-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: WorkOS Webhooks API
description: WorkOS REST API
version: '1.0'
contact:
name: WorkOS
url: https://workos.com
email: support@workos.com
license:
name: MIT
url: https://opensource.org/license/MIT
servers:
- url: https://api.workos.com
description: Production
- url: https://api.workos-test.com
description: Staging
security:
- bearer: []
tags:
- name: Webhooks
description: Manage webhooks.
x-displayName: Webhooks
paths:
/webhook_endpoints:
get:
description: Get a list of all of your existing webhook endpoints.
operationId: WebhookEndpointsController_list
parameters:
- name: before
required: false
in: query
description: An object ID that defines your place in the list. When the ID is not present, you are at the end of the list. For example, if you make a list request and receive 100 objects, ending with `"obj_123"`, your subsequent call can include `before="obj_123"` to fetch a new batch of objects before `"obj_123"`.
schema:
example: xxx_01HXYZ123456789ABCDEFGHIJ
type: string
- name: after
required: false
in: query
description: An object ID that defines your place in the list. When the ID is not present, you are at the end of the list. For example, if you make a list request and receive 100 objects, ending with `"obj_123"`, your subsequent call can include `after="obj_123"` to fetch a new batch of objects after `"obj_123"`.
schema:
example: xxx_01HXYZ987654321KJIHGFEDCBA
type: string
- name: limit
required: false
in: query
description: Upper limit on the number of objects to return, between `1` and `100`.
schema:
minimum: 1
maximum: 100
default: 10
example: 10
type: integer
- name: order
required: false
in: query
description: Order the results by the creation time. Supported values are `"asc"` (ascending), `"desc"` (descending), and `"normal"` (descending with reversed cursor semantics where `before` fetches older records and `after` fetches newer records). Defaults to descending.
schema:
$ref: '#/components/schemas/PaginationOrder'
responses:
'200':
description: List of webhook endpoints.
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookEndpointList'
summary: List Webhook Endpoints
tags:
- Webhooks
post:
description: Create a new webhook endpoint to receive event notifications.
operationId: WebhookEndpointsController_create
parameters: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateWebhookEndpointDto'
responses:
'201':
description: Webhook endpoint created successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookEndpointJson'
'409':
description: A Webhook Endpoint with the same endpoint URL already exists.
content:
application/json:
schema:
type: object
properties:
code:
type: string
description: The error code identifying the type of error.
example: duplicate_endpoint
const: duplicate_endpoint
message:
type: string
description: A human-readable description of the error.
example: Request could not be processed.
required:
- code
- message
'422':
description: Unprocessable Entity
content:
application/json:
schema:
oneOf:
- type: object
properties:
code:
type: string
description: The error code identifying the type of error.
example: invalid_url
const: invalid_url
message:
type: string
description: A human-readable description of the error.
example: Request could not be processed.
required:
- code
- message
- type: object
properties:
code:
type: string
description: The error code identifying the type of error.
example: invalid_request_parameters
const: invalid_request_parameters
message:
type: string
description: A human-readable description of the error.
example: Validation failed.
errors:
type: array
items:
type: object
properties:
code:
type: string
description: The validation error code.
example: unknown_event_type
message:
type: string
description: A human-readable description of the validation error.
example: Invalid enum value.
required:
- code
- message
description: The list of validation errors.
required:
- code
- message
- errors
summary: Create a Webhook Endpoint
tags:
- Webhooks
/webhook_endpoints/{id}:
patch:
description: Update the properties of an existing webhook endpoint.
operationId: WebhookEndpointsController_update
parameters:
- name: id
required: true
in: path
description: Unique identifier of the Webhook Endpoint.
schema:
type: string
example: we_0123456789
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateWebhookEndpointDto'
responses:
'200':
description: Webhook endpoint updated successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookEndpointJson'
'404':
description: Webhook endpoint not found.
content:
application/json:
schema:
type: object
properties:
code:
type: string
description: The error code identifying the type of error.
example: entity_not_found
const: entity_not_found
message:
type: string
description: A human-readable description of the error.
example: Request could not be processed.
required:
- code
- message
'409':
description: A Webhook Endpoint with the same endpoint URL already exists.
content:
application/json:
schema:
type: object
properties:
code:
type: string
description: The error code identifying the type of error.
example: duplicate_endpoint
const: duplicate_endpoint
message:
type: string
description: A human-readable description of the error.
example: Request could not be processed.
required:
- code
- message
'422':
description: Unprocessable Entity
content:
application/json:
schema:
oneOf:
- type: object
properties:
code:
type: string
description: The error code identifying the type of error.
example: invalid_url
const: invalid_url
message:
type: string
description: A human-readable description of the error.
example: Request could not be processed.
required:
- code
- message
- type: object
properties:
code:
type: string
description: The error code identifying the type of error.
example: invalid_request_parameters
const: invalid_request_parameters
message:
type: string
description: A human-readable description of the error.
example: Validation failed.
errors:
type: array
items:
type: object
properties:
code:
type: string
description: The validation error code.
example: unknown_event_type
message:
type: string
description: A human-readable description of the validation error.
example: Invalid enum value.
required:
- code
- message
description: The list of validation errors.
required:
- code
- message
- errors
summary: Update a Webhook Endpoint
tags:
- Webhooks
delete:
description: Delete an existing webhook endpoint.
operationId: WebhookEndpointsController_delete
parameters:
- name: id
required: true
in: path
description: Unique identifier of the Webhook Endpoint.
schema:
type: string
example: we_0123456789
responses:
'204':
description: Webhook endpoint deleted successfully.
'404':
description: Webhook endpoint not found.
content:
application/json:
schema:
type: object
properties:
code:
type: string
description: The error code identifying the type of error.
example: entity_not_found
const: entity_not_found
message:
type: string
description: A human-readable description of the error.
example: Request could not be processed.
required:
- code
- message
summary: Delete a Webhook Endpoint
tags:
- Webhooks
components:
schemas:
CreateWebhookEndpointDto:
type: object
properties:
endpoint_url:
type: string
description: The HTTPS URL where webhooks will be sent.
example: https://example.com/webhooks
events:
type: array
description: The events that the Webhook Endpoint is subscribed to.
items:
type: string
enum:
- authentication.email_verification_succeeded
- authentication.magic_auth_failed
- authentication.magic_auth_succeeded
- authentication.mfa_succeeded
- authentication.oauth_failed
- authentication.oauth_succeeded
- authentication.password_failed
- authentication.password_succeeded
- authentication.passkey_failed
- authentication.passkey_succeeded
- authentication.sso_failed
- authentication.sso_started
- authentication.sso_succeeded
- authentication.sso_timed_out
- authentication.radar_risk_detected
- api_key.created
- api_key.revoked
- connection.activated
- connection.deactivated
- connection.saml_certificate_renewal_required
- connection.saml_certificate_renewed
- connection.deleted
- dsync.activated
- dsync.deleted
- dsync.group.created
- dsync.group.deleted
- dsync.group.updated
- dsync.group.user_added
- dsync.group.user_removed
- dsync.user.created
- dsync.user.deleted
- dsync.user.updated
- email_verification.created
- group.created
- group.deleted
- group.member_added
- group.member_removed
- group.updated
- flag.created
- flag.deleted
- flag.updated
- flag.rule_updated
- invitation.accepted
- invitation.created
- invitation.resent
- invitation.revoked
- magic_auth.created
- organization.created
- organization.deleted
- organization.updated
- organization_domain.created
- organization_domain.deleted
- organization_domain.updated
- organization_domain.verified
- organization_domain.verification_failed
- password_reset.created
- password_reset.succeeded
- user.created
- user.updated
- user.deleted
- organization_membership.created
- organization_membership.deleted
- organization_membership.updated
- role.created
- role.deleted
- role.updated
- organization_role.created
- organization_role.deleted
- organization_role.updated
- permission.created
- permission.deleted
- permission.updated
- session.created
- session.revoked
- waitlist_user.approved
- waitlist_user.created
- waitlist_user.denied
example:
- user.created
- dsync.user.created
required:
- endpoint_url
- events
UpdateWebhookEndpointDto:
type: object
properties:
endpoint_url:
type: string
description: The HTTPS URL where webhooks will be sent.
example: https://example.com/webhooks
status:
type: string
enum:
- enabled
- disabled
description: Whether the Webhook Endpoint is enabled or disabled.
example: enabled
events:
type: array
description: The events that the Webhook Endpoint is subscribed to.
items:
type: string
enum:
- authentication.email_verification_succeeded
- authentication.magic_auth_failed
- authentication.magic_auth_succeeded
- authentication.mfa_succeeded
- authentication.oauth_failed
- authentication.oauth_succeeded
- authentication.password_failed
- authentication.password_succeeded
- authentication.passkey_failed
- authentication.passkey_succeeded
- authentication.sso_failed
- authentication.sso_started
- authentication.sso_succeeded
- authentication.sso_timed_out
- authentication.radar_risk_detected
- api_key.created
- api_key.revoked
- connection.activated
- connection.deactivated
- connection.saml_certificate_renewal_required
- connection.saml_certificate_renewed
- connection.deleted
- dsync.activated
- dsync.deleted
- dsync.group.created
- dsync.group.deleted
- dsync.group.updated
- dsync.group.user_added
- dsync.group.user_removed
- dsync.user.created
- dsync.user.deleted
- dsync.user.updated
- email_verification.created
- group.created
- group.deleted
- group.member_added
- group.member_removed
- group.updated
- flag.created
- flag.deleted
- flag.updated
- flag.rule_updated
- invitation.accepted
- invitation.created
- invitation.resent
- invitation.revoked
- magic_auth.created
- organization.created
- organization.deleted
- organization.updated
- organization_domain.created
- organization_domain.deleted
- organization_domain.updated
- organization_domain.verified
- organization_domain.verification_failed
- password_reset.created
- password_reset.succeeded
- user.created
- user.updated
- user.deleted
- organization_membership.created
- organization_membership.deleted
- organization_membership.updated
- role.created
- role.deleted
- role.updated
- organization_role.created
- organization_role.deleted
- organization_role.updated
- permission.created
- permission.deleted
- permission.updated
- session.created
- session.revoked
- waitlist_user.approved
- waitlist_user.created
- waitlist_user.denied
example:
- user.created
- dsync.user.created
WebhookEndpointList:
type: object
properties:
object:
type: string
description: Indicates this is a list response.
const: list
data:
type: array
items:
$ref: '#/components/schemas/WebhookEndpointJson'
description: The list of records for the current page.
list_metadata:
type: object
properties:
before:
type:
- string
- 'null'
description: An object ID that defines your place in the list. When the ID is not present, you are at the start of the list.
example: we_01HXYZ123456789ABCDEFGHIJ
after:
type:
- string
- 'null'
description: An object ID that defines your place in the list. When the ID is not present, you are at the end of the list.
example: we_01HXYZ987654321KJIHGFEDCBA
required:
- before
- after
description: Pagination cursors for navigating between pages of results.
required:
- object
- data
- list_metadata
PaginationOrder:
type: string
enum:
- normal
- desc
- asc
example: desc
default: desc
WebhookEndpointJson:
type: object
properties:
object:
type: string
description: Distinguishes the Webhook Endpoint object.
const: webhook_endpoint
id:
type: string
description: Unique identifier of the Webhook Endpoint.
example: we_0123456789
endpoint_url:
type: string
description: The URL to which webhooks are sent.
example: https://example.com/webhooks
secret:
type: string
description: The secret used to sign webhook payloads.
example: whsec_0FWAiVGkEfGBqqsJH4aNAGBJ4
status:
type: string
enum:
- enabled
- disabled
description: Whether the Webhook Endpoint is enabled or disabled.
example: enabled
events:
type: array
items:
type: string
description: The events that the Webhook Endpoint is subscribed to.
example:
- user.created
- dsync.user.created
created_at:
format: date-time
type: string
description: An ISO 8601 timestamp.
example: '2026-01-15T12:00:00.000Z'
updated_at:
format: date-time
type: string
description: An ISO 8601 timestamp.
example: '2026-01-15T12:00:00.000Z'
required:
- object
- id
- endpoint_url
- secret
- status
- events
- created_at
- updated_at
securitySchemes:
bearer:
scheme: bearer
bearerFormat: JWT
type: http
description: 'Your WorkOS API key prefixed with `sk_`. Pass it as a Bearer token: `Authorization: Bearer sk_example_123456789`.'
access_token:
scheme: bearer
bearerFormat: JWT
type: http
description: An SSO access token returned from the Get a Profile and Token endpoint.