commit 85db61186e5e50c0abaf12a85554a113de33684c Author: a2a-platform Date: Sat Jun 27 01:05:11 2026 +0000 deploy diff --git a/README.md b/README.md new file mode 100644 index 0000000..d244093 --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +# workos-openapi-agent + +Generated A2APack agent for WorkOS. + +- Source OpenAPI: https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml +- Generated operations: 193 +- Main skill: `auto` +- Routing mode: DeepAgents subagents across 23 route groups + +The generated code is intentionally editable. Tune prompts, operation +grouping, auth names, and safety policy before publishing serious agents. diff --git a/a2a.yaml b/a2a.yaml new file mode 100644 index 0000000..31ffca1 --- /dev/null +++ b/a2a.yaml @@ -0,0 +1,13 @@ +name: workos-openapi-agent +version: '1.0' +entrypoint: agent:WorkosOpenapiAgent +description: Enterprise auth and directory platform API for SSO, SCIM, orgs, audit + logs, and user management. +runtime: + resources: + cpu: 200m + memory: 512Mi + egress: + allow_hosts: + - api.workos.com + deny_internet_by_default: true diff --git a/agent.py b/agent.py new file mode 100644 index 0000000..c06a0a3 --- /dev/null +++ b/agent.py @@ -0,0 +1,435 @@ +from __future__ import annotations + +import base64 +import json +import re +from pathlib import Path +from typing import Any + +import httpx +from a2a_pack.deepagents import create_a2a_deep_agent +from langchain_core.messages import BaseMessage +from langchain_core.tools import StructuredTool +from pydantic import BaseModel, Field + +from a2a_pack import ( + A2AAgent, + ConsumerSetup, + ConsumerSetupField, + ConsumerSetupMissing, + EgressPolicy, + LLMProvisioning, + Pricing, + Resources, + RunContext, + skill, +) + + +DEFAULT_BASE_URL = "https://api.workos.com" +OPERATIONS = json.loads("{\n \"api_keys_controller_delete\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Permanently deletes an API key. This action cannot be undone. Once deleted, any requests using this API key will fail authentication.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"api_keys_controller_delete\",\n \"parameters\": [\n {\n \"description\": \"The unique ID of the API key.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"api_key_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/api_keys/{id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"api_keys_controller_delete\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Delete an API key\",\n \"tags\": [\n \"api_keys\"\n ]\n },\n \"api_keys_controller_expire\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Expire an API key immediately, schedule a future expiration, or clear a scheduled future expiration.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"api_keys_controller_expire\",\n \"parameters\": [\n {\n \"description\": \"The unique ID of the API key.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"api_key_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/api_keys/{id}/expire\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ExpireApiKeyDto\"\n },\n \"security\": null,\n \"skill_name\": \"api_keys_controller_expire\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Expire an API key\",\n \"tags\": [\n \"api_keys\"\n ]\n },\n \"api_keys_controller_validate_api_key\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Validate an API key value and return the API key object if valid.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"api_keys_controller_validate_api_key\",\n \"parameters\": [],\n \"path\": \"/api_keys/validations\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ValidateApiKeyDto\"\n },\n \"security\": null,\n \"skill_name\": \"api_keys_controller_validate_api_key\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Validate API key\",\n \"tags\": [\n \"api_keys\"\n ]\n },\n \"application_credentials_controller_create\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Create new secrets for a Connect Application.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"application_credentials_controller_create\",\n \"parameters\": [\n {\n \"description\": \"The application ID or client ID of the Connect Application.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"conn_app_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/connect/applications/{id}/client_secrets\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreateApplicationSecretDto\"\n },\n \"security\": null,\n \"skill_name\": \"application_credentials_controller_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Create a new client secret for a Connect Application\",\n \"tags\": [\n \"application.client-secrets\"\n ]\n },\n \"application_credentials_controller_delete\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Delete (revoke) an existing client secret.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"application_credentials_controller_delete\",\n \"parameters\": [\n {\n \"description\": \"The unique ID of the client secret.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"secret_01J9Q2Z3X4Y5W6V7U8T9S0R1Q\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/connect/client_secrets/{id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"application_credentials_controller_delete\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Delete a Client Secret\",\n \"tags\": [\n \"application.client-secrets\"\n ]\n },\n \"application_credentials_controller_list\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"List all client secrets associated with a Connect Application.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"application_credentials_controller_list\",\n \"parameters\": [\n {\n \"description\": \"The application ID or client ID of the Connect Application.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"conn_app_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/connect/applications/{id}/client_secrets\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"application_credentials_controller_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List Client Secrets for a Connect Application\",\n \"tags\": [\n \"application.client-secrets\"\n ]\n },\n \"applications_controller_create\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Create a new Connect Application. Supports both OAuth and Machine-to-Machine (M2M) application types.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"applications_controller_create\",\n \"parameters\": [],\n \"path\": \"/connect/applications\",\n \"request_body\": {\n \"oneOf\": [\n {\n \"$ref\": \"#/components/schemas/CreateOAuthApplicationDto\"\n },\n {\n \"$ref\": \"#/components/schemas/CreateM2MApplicationDto\"\n }\n ]\n },\n \"security\": null,\n \"skill_name\": \"applications_controller_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Create a Connect Application\",\n \"tags\": [\n \"applications\"\n ]\n },\n \"applications_controller_delete\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Delete an existing Connect Application.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"applications_controller_delete\",\n \"parameters\": [\n {\n \"description\": \"The application ID or client ID of the Connect Application.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"conn_app_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/connect/applications/{id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"applications_controller_delete\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Delete a Connect Application\",\n \"tags\": [\n \"applications\"\n ]\n },\n \"applications_controller_find\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Retrieve details for a specific Connect Application by ID or client ID.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"applications_controller_find\",\n \"parameters\": [\n {\n \"description\": \"The application ID or client ID of the Connect Application.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"conn_app_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/connect/applications/{id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"applications_controller_find\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get a Connect Application\",\n \"tags\": [\n \"applications\"\n ]\n },\n \"applications_controller_list\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"List all Connect Applications in the current environment with optional filtering.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"applications_controller_list\",\n \"parameters\": [\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ987654321KJIHGFEDCBA\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"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).\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n },\n {\n \"description\": \"Filter Connect Applications by organization ID.\",\n \"in\": \"query\",\n \"name\": \"organization_id\",\n \"required\": false,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/connect/applications\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"applications_controller_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List Connect Applications\",\n \"tags\": [\n \"applications\"\n ]\n },\n \"applications_controller_update\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Update an existing Connect Application. For OAuth applications, you can update redirect URIs. For all applications, you can update the name, description, and scopes.\",\n \"destructive\": true,\n \"method\": \"PUT\",\n \"operation_id\": \"applications_controller_update\",\n \"parameters\": [\n {\n \"description\": \"The application ID or client ID of the Connect Application.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"conn_app_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/connect/applications/{id}\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UpdateOAuthApplicationDto\"\n },\n \"security\": null,\n \"skill_name\": \"applications_controller_update\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Update a Connect Application\",\n \"tags\": [\n \"applications\"\n ]\n },\n \"audit_log_events_controller_create\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Create an Audit Log Event.\\n\\nThis API supports idempotency which guarantees that performing the same operation multiple times will have the same result as if the operation were performed only once. This is handy in situations where you may need to retry a request due to a failure or prevent accidental duplicate requests from creating more than one resource.\\n\\nTo achieve idempotency, you can add `Idempotency-Key` request header to a Create Event request with a unique string as the value. Each subsequent request matching this unique string will return the same response. We suggest using [v4 UUIDs](https://en.wikipedia.org/wiki/Universally_unique_identifier) for idempotency keys to avoid collisions.\\n\\nIdempotency keys expire after 24 hours. The API will generate a new response if you submit a request with an expired key.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"audit_log_events_controller_create\",\n \"parameters\": [\n {\n \"description\": \"A unique string to prevent duplicate requests. Each subsequent request matching this unique string will return the same response. We suggest using v4 UUIDs. Keys expire after 24 hours.\",\n \"in\": \"header\",\n \"name\": \"idempotency-key\",\n \"required\": false,\n \"schema\": {\n \"example\": \"884793cd-bef4-46cf-8790-e3d4957a09ce\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/audit_logs/events\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/AuditLogEventIngestionDto\"\n },\n \"security\": null,\n \"skill_name\": \"audit_log_events_controller_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Create Event\",\n \"tags\": [\n \"audit-logs\"\n ]\n },\n \"audit_log_exports_controller_export\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get an Audit Log Export. The URL will expire after 10 minutes. If the export is needed again at a later time, refetching the export will regenerate the URL.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"audit_log_exports_controller_export\",\n \"parameters\": [\n {\n \"description\": \"The unique ID of the Audit Log Export.\",\n \"in\": \"path\",\n \"name\": \"auditLogExportId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"audit_log_export_01GBZK5MP7TD1YCFQHFR22180V\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/audit_logs/exports/{auditLogExportId}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"audit_log_exports_controller_export\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get Export\",\n \"tags\": [\n \"audit-logs\"\n ]\n },\n \"audit_log_exports_controller_exports\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Create an Audit Log Export. Exports are scoped to a single organization within a specified date range.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"audit_log_exports_controller_exports\",\n \"parameters\": [],\n \"path\": \"/audit_logs/exports\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/AuditLogExportCreationDto\"\n },\n \"security\": null,\n \"skill_name\": \"audit_log_exports_controller_exports\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Create Export\",\n \"tags\": [\n \"audit-logs\"\n ]\n },\n \"audit_log_validator_versions_controller_create\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Creates a new Audit Log schema used to validate the payload of incoming Audit Log Events. If the `action` does not exist, it will also be created.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"audit_log_validator_versions_controller_create\",\n \"parameters\": [\n {\n \"description\": \"The name of the Audit Log action.\",\n \"in\": \"path\",\n \"name\": \"actionName\",\n \"required\": true,\n \"schema\": {\n \"example\": \"user.logged_in\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/audit_logs/actions/{actionName}/schemas\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/AuditLogSchemaDto\"\n },\n \"security\": null,\n \"skill_name\": \"audit_log_validator_versions_controller_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Create Schema\",\n \"tags\": [\n \"audit-logs\"\n ]\n },\n \"audit_log_validator_versions_controller_schemas\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get a list of all schemas for the Audit Logs action identified by `:name`.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"audit_log_validator_versions_controller_schemas\",\n \"parameters\": [\n {\n \"description\": \"The name of the Audit Log action.\",\n \"in\": \"path\",\n \"name\": \"actionName\",\n \"required\": true,\n \"schema\": {\n \"example\": \"user.logged_in\",\n \"type\": \"string\"\n }\n },\n {\n \"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.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"obj_1234567890\",\n \"type\": \"string\"\n }\n },\n {\n \"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.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"obj_1234567890\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Order the results by the creation time.\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n }\n ],\n \"path\": \"/audit_logs/actions/{actionName}/schemas\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"audit_log_validator_versions_controller_schemas\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List Schemas\",\n \"tags\": [\n \"audit-logs\"\n ]\n },\n \"audit_log_validators_controller_list\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get a list of all Audit Log actions in the current environment.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"audit_log_validators_controller_list\",\n \"parameters\": [\n {\n \"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.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"obj_1234567890\",\n \"type\": \"string\"\n }\n },\n {\n \"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.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"obj_1234567890\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Order the results by the creation time.\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n }\n ],\n \"path\": \"/audit_logs/actions\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"audit_log_validators_controller_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List Actions\",\n \"tags\": [\n \"audit-logs\"\n ]\n },\n \"audit_logs_retention_controller_audit_logs_retention\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get the configured event retention period for the given Organization.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"audit_logs_retention_controller_audit_logs_retention\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier of the Organization.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/organizations/{id}/audit_logs_retention\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"audit_logs_retention_controller_audit_logs_retention\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get Retention\",\n \"tags\": [\n \"audit-logs\"\n ]\n },\n \"audit_logs_retention_controller_update_audit_logs_retention\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Set the event retention period for the given Organization.\",\n \"destructive\": true,\n \"method\": \"PUT\",\n \"operation_id\": \"audit_logs_retention_controller_update_audit_logs_retention\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier of the Organization.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/organizations/{id}/audit_logs_retention\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UpdateAuditLogsRetentionDto\"\n },\n \"security\": null,\n \"skill_name\": \"audit_logs_retention_controller_update_audit_logs_retention\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Set Retention\",\n \"tags\": [\n \"audit-logs\"\n ]\n },\n \"authentication_challenges_controller_verify\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Verifies an Authentication Challenge.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"authentication_challenges_controller_verify\",\n \"parameters\": [\n {\n \"description\": \"The unique ID of the Authentication Challenge.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"auth_challenge_01FVYZ5QM8N98T9ME5BCB2BBMJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/auth/challenges/{id}/verify\",\n \"request_body\": {\n \"properties\": {\n \"code\": {\n \"description\": \"The one-time code to verify.\",\n \"example\": \"123456\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"code\"\n ],\n \"type\": \"object\"\n },\n \"security\": null,\n \"skill_name\": \"authentication_challenges_controller_verify\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Verify Challenge\",\n \"tags\": [\n \"multi-factor-auth.challenges\"\n ]\n },\n \"authentication_factors_controller_challenge\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Creates a Challenge for an Authentication Factor.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"authentication_factors_controller_challenge\",\n \"parameters\": [\n {\n \"description\": \"The unique ID of the Authentication Factor to be challenged.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/auth/factors/{id}/challenge\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ChallengeAuthenticationFactorDto\"\n },\n \"security\": null,\n \"skill_name\": \"authentication_factors_controller_challenge\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Challenge Factor\",\n \"tags\": [\n \"multi-factor-auth\"\n ]\n },\n \"authentication_factors_controller_create\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Enrolls an Authentication Factor to be used as an additional factor of authentication. The returned ID should be used to create an authentication Challenge.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"authentication_factors_controller_create\",\n \"parameters\": [],\n \"path\": \"/auth/factors/enroll\",\n \"request_body\": {\n \"properties\": {\n \"phone_number\": {\n \"description\": \"Required when type is 'sms'.\",\n \"example\": \"+15555555555\",\n \"type\": \"string\"\n },\n \"totp_issuer\": {\n \"description\": \"Required when type is 'totp'.\",\n \"example\": \"Foo Corp\",\n \"type\": \"string\"\n },\n \"totp_user\": {\n \"description\": \"Required when type is 'totp'.\",\n \"example\": \"alan.turing@example.com\",\n \"type\": \"string\"\n },\n \"type\": {\n \"description\": \"The type of factor to enroll.\",\n \"enum\": [\n \"generic_otp\",\n \"sms\",\n \"totp\"\n ],\n \"example\": \"totp\",\n \"type\": \"string\"\n },\n \"user_id\": {\n \"description\": \"The ID of the user to associate the factor with.\",\n \"example\": \"user_01E4ZCR3C56J083X43JQXF3JK5\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"type\"\n ],\n \"type\": \"object\"\n },\n \"security\": null,\n \"skill_name\": \"authentication_factors_controller_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Enroll Factor\",\n \"tags\": [\n \"multi-factor-auth\"\n ]\n },\n \"authentication_factors_controller_delete\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Permanently deletes an Authentication Factor. It cannot be undone.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"authentication_factors_controller_delete\",\n \"parameters\": [\n {\n \"description\": \"The unique ID of the Factor.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/auth/factors/{id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authentication_factors_controller_delete\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Delete Factor\",\n \"tags\": [\n \"multi-factor-auth\"\n ]\n },\n \"authentication_factors_controller_get\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Gets an Authentication Factor.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"authentication_factors_controller_get\",\n \"parameters\": [\n {\n \"description\": \"The unique ID of the Factor.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/auth/factors/{id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authentication_factors_controller_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get Factor\",\n \"tags\": [\n \"multi-factor-auth\"\n ]\n },\n \"authorization_controller_check\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Check if an organization membership has a specific permission on a resource. Supports identification by resource_id OR by resource_external_id + resource_type_slug.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"authorization_controller_check\",\n \"parameters\": [\n {\n \"description\": \"The ID of the organization membership to check.\",\n \"in\": \"path\",\n \"name\": \"organization_membership_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"om_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/organization_memberships/{organization_membership_id}/check\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CheckAuthorizationDto\"\n },\n \"security\": null,\n \"skill_name\": \"authorization_controller_check\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Check authorization\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_controller_list_effective_permissions\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Returns all permissions the organization membership effectively has on a resource, including permissions inherited through roles assigned to ancestor resources.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"authorization_controller_list_effective_permissions\",\n \"parameters\": [\n {\n \"description\": \"The ID of the organization membership.\",\n \"in\": \"path\",\n \"name\": \"organization_membership_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"om_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The ID of the authorization resource.\",\n \"in\": \"path\",\n \"name\": \"resource_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"authz_resource_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ987654321KJIHGFEDCBA\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"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).\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n }\n ],\n \"path\": \"/authorization/organization_memberships/{organization_membership_id}/resources/{resource_id}/permissions\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorization_controller_list_effective_permissions\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List effective permissions for an organization membership on a resource\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_controller_list_effective_permissions_by_external_id\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Returns all permissions the organization membership effectively has on a resource identified by its external ID, including permissions inherited through roles assigned to ancestor resources.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"authorization_controller_list_effective_permissions_by_external_id\",\n \"parameters\": [\n {\n \"description\": \"The ID of the organization membership.\",\n \"in\": \"path\",\n \"name\": \"organization_membership_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"om_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The slug of the resource type.\",\n \"in\": \"path\",\n \"name\": \"resource_type_slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"document\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"An identifier you provide to reference the resource in your system.\",\n \"in\": \"path\",\n \"name\": \"external_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"doc-456\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ987654321KJIHGFEDCBA\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"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).\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n }\n ],\n \"path\": \"/authorization/organization_memberships/{organization_membership_id}/resources/{resource_type_slug}/{external_id}/permissions\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorization_controller_list_effective_permissions_by_external_id\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List effective permissions for an organization membership on a resource by external ID\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_controller_list_resources_for_membership\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Returns all child resources of a parent resource where the organization membership has a specific permission. This is useful for resource discovery\\u2014answering \\\"What projects can this user access in this workspace?\\\"\\n\\nYou must provide either `parent_resource_id` or both `parent_resource_external_id` and `parent_resource_type_slug` to identify the parent resource.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"authorization_controller_list_resources_for_membership\",\n \"parameters\": [\n {\n \"description\": \"The ID of the organization membership.\",\n \"in\": \"path\",\n \"name\": \"organization_membership_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"om_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ987654321KJIHGFEDCBA\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"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).\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n },\n {\n \"description\": \"The permission slug to filter by. Only child resources where the organization membership has this permission are returned.\",\n \"in\": \"query\",\n \"name\": \"permission_slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"project:read\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The WorkOS ID of the parent resource. Provide this or both `parent_resource_external_id` and `parent_resource_type_slug`, but not both. Mutually exclusive with `parent_resource_type_slug` and `parent_resource_external_id`.\",\n \"in\": \"query\",\n \"name\": \"parent_resource_id\",\n \"required\": false,\n \"schema\": {\n \"example\": \"authz_resource_01XYZ789\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The slug of the parent resource type. Must be provided together with `parent_resource_external_id`. Required with `parent_resource_external_id`. Mutually exclusive with `parent_resource_id`.\",\n \"in\": \"query\",\n \"name\": \"parent_resource_type_slug\",\n \"required\": false,\n \"schema\": {\n \"example\": \"project\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The application-specific external identifier of the parent resource. Must be provided together with `parent_resource_type_slug`. Required with `parent_resource_type_slug`. Mutually exclusive with `parent_resource_id`.\",\n \"in\": \"query\",\n \"name\": \"parent_resource_external_id\",\n \"required\": false,\n \"schema\": {\n \"example\": \"external_project_123\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/organization_memberships/{organization_membership_id}/resources\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorization_controller_list_resources_for_membership\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List resources for organization membership\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_group_role_assignments_controller_create\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Assign a role to a group on a specific resource.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"authorization_group_role_assignments_controller_create\",\n \"parameters\": [\n {\n \"description\": \"The ID of the group.\",\n \"in\": \"path\",\n \"name\": \"group_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"group_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/groups/{group_id}/role_assignments\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreateGroupRoleAssignmentDto\"\n },\n \"security\": null,\n \"skill_name\": \"authorization_group_role_assignments_controller_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Assign a role to a group\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_group_role_assignments_controller_get\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get a specific role assignment for a group by its ID.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"authorization_group_role_assignments_controller_get\",\n \"parameters\": [\n {\n \"description\": \"The ID of the group.\",\n \"in\": \"path\",\n \"name\": \"group_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"group_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The ID of the group role assignment.\",\n \"in\": \"path\",\n \"name\": \"role_assignment_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"gra_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/groups/{group_id}/role_assignments/{role_assignment_id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorization_group_role_assignments_controller_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get a group role assignment\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_group_role_assignments_controller_list\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"List all role assignments granted to a group. Each assignment represents a role granted to the group on a resource.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"authorization_group_role_assignments_controller_list\",\n \"parameters\": [\n {\n \"description\": \"The ID of the group.\",\n \"in\": \"path\",\n \"name\": \"group_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"group_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ987654321KJIHGFEDCBA\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"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).\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n }\n ],\n \"path\": \"/authorization/groups/{group_id}/role_assignments\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorization_group_role_assignments_controller_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List role assignments for a group\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_group_role_assignments_controller_remove_group_role_assignment\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Remove a specific role assignment from a group by its ID.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"authorization_group_role_assignments_controller_remove_group_role_assignment\",\n \"parameters\": [\n {\n \"description\": \"The ID of the group.\",\n \"in\": \"path\",\n \"name\": \"group_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"group_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The ID of the group role assignment to remove.\",\n \"in\": \"path\",\n \"name\": \"role_assignment_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"gra_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/groups/{group_id}/role_assignments/{role_assignment_id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorization_group_role_assignments_controller_remove_group_role_assignment\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Remove a group role assignment\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_group_role_assignments_controller_remove_group_role_assignments\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Remove role assignments from a group that match the provided criteria. Returns 404 when no matching active assignment is found.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"authorization_group_role_assignments_controller_remove_group_role_assignments\",\n \"parameters\": [\n {\n \"description\": \"The ID of the group.\",\n \"in\": \"path\",\n \"name\": \"group_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"group_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/groups/{group_id}/role_assignments\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/DeleteGroupRoleAssignmentsByCriteriaDto\"\n },\n \"security\": null,\n \"skill_name\": \"authorization_group_role_assignments_controller_remove_group_role_assignments\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Remove group role assignments by criteria\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_group_role_assignments_controller_replace_group_role_assignments\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Replace all role assignments for a group with the provided list. Existing assignments not in the list will be removed.\",\n \"destructive\": true,\n \"method\": \"PUT\",\n \"operation_id\": \"authorization_group_role_assignments_controller_replace_group_role_assignments\",\n \"parameters\": [\n {\n \"description\": \"The ID of the group.\",\n \"in\": \"path\",\n \"name\": \"group_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"group_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/groups/{group_id}/role_assignments\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ReplaceGroupRoleAssignmentsDto\"\n },\n \"security\": null,\n \"skill_name\": \"authorization_group_role_assignments_controller_replace_group_role_assignments\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Replace all role assignments for a group\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_organization_role_permissions_controller_add_permission\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Add a single permission to a custom role. If the permission is already assigned to the role, this operation has no effect.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"authorization_organization_role_permissions_controller_add_permission\",\n \"parameters\": [\n {\n \"description\": \"The ID of the organization.\",\n \"in\": \"path\",\n \"name\": \"organizationId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The slug of the role.\",\n \"in\": \"path\",\n \"name\": \"slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org-admin\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/organizations/{organizationId}/roles/{slug}/permissions\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/AddRolePermissionDto\"\n },\n \"security\": null,\n \"skill_name\": \"authorization_organization_role_permissions_controller_add_permission\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Add a permission to a custom role\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_organization_role_permissions_controller_remove_permission\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Remove a single permission from a custom role by its slug.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"authorization_organization_role_permissions_controller_remove_permission\",\n \"parameters\": [\n {\n \"description\": \"The ID of the organization.\",\n \"in\": \"path\",\n \"name\": \"organizationId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The slug of the role.\",\n \"in\": \"path\",\n \"name\": \"slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org-admin\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The slug of the permission to remove.\",\n \"in\": \"path\",\n \"name\": \"permissionSlug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"documents:read\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/organizations/{organizationId}/roles/{slug}/permissions/{permissionSlug}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorization_organization_role_permissions_controller_remove_permission\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Remove a permission from a custom role\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_organization_role_permissions_controller_set_permissions\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Replace all permissions on a custom role with the provided list.\",\n \"destructive\": true,\n \"method\": \"PUT\",\n \"operation_id\": \"authorization_organization_role_permissions_controller_set_permissions\",\n \"parameters\": [\n {\n \"description\": \"The ID of the organization.\",\n \"in\": \"path\",\n \"name\": \"organizationId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The slug of the role.\",\n \"in\": \"path\",\n \"name\": \"slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org-admin\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/organizations/{organizationId}/roles/{slug}/permissions\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SetRolePermissionsDto\"\n },\n \"security\": null,\n \"skill_name\": \"authorization_organization_role_permissions_controller_set_permissions\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Set permissions for a custom role\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_organization_roles_controller_create\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Create a new custom role for this organization.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"authorization_organization_roles_controller_create\",\n \"parameters\": [\n {\n \"description\": \"The ID of the organization.\",\n \"in\": \"path\",\n \"name\": \"organizationId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/organizations/{organizationId}/roles\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreateOrganizationRoleDto\"\n },\n \"security\": null,\n \"skill_name\": \"authorization_organization_roles_controller_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Create a custom role\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_organization_roles_controller_delete\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Delete an existing custom role.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"authorization_organization_roles_controller_delete\",\n \"parameters\": [\n {\n \"description\": \"The ID of the organization.\",\n \"in\": \"path\",\n \"name\": \"organizationId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The slug of the role.\",\n \"in\": \"path\",\n \"name\": \"slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org-admin\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/organizations/{organizationId}/roles/{slug}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorization_organization_roles_controller_delete\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Delete a custom role\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_organization_roles_controller_get\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Retrieve a role that applies to an organization by its slug. This can return either an environment role or a custom role.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"authorization_organization_roles_controller_get\",\n \"parameters\": [\n {\n \"description\": \"The ID of the organization.\",\n \"in\": \"path\",\n \"name\": \"organizationId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The slug of the role.\",\n \"in\": \"path\",\n \"name\": \"slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org-billing-admin\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/organizations/{organizationId}/roles/{slug}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorization_organization_roles_controller_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get a custom role\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_organization_roles_controller_list\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get a list of all roles that apply to an organization. This includes both environment roles and custom roles, returned in priority order.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"authorization_organization_roles_controller_list\",\n \"parameters\": [\n {\n \"description\": \"The ID of the organization.\",\n \"in\": \"path\",\n \"name\": \"organizationId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/organizations/{organizationId}/roles\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorization_organization_roles_controller_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List custom roles\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_organization_roles_controller_update\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Update an existing custom role. Only the fields provided in the request body will be updated.\",\n \"destructive\": true,\n \"method\": \"PATCH\",\n \"operation_id\": \"authorization_organization_roles_controller_update\",\n \"parameters\": [\n {\n \"description\": \"The ID of the organization.\",\n \"in\": \"path\",\n \"name\": \"organizationId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The slug of the role.\",\n \"in\": \"path\",\n \"name\": \"slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org-billing-admin\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/organizations/{organizationId}/roles/{slug}\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UpdateOrganizationRoleDto\"\n },\n \"security\": null,\n \"skill_name\": \"authorization_organization_roles_controller_update\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Update a custom role\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_permissions_controller_create\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Create a new permission in your WorkOS environment. The permission can then be assigned to environment roles and custom roles.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"authorization_permissions_controller_create\",\n \"parameters\": [],\n \"path\": \"/authorization/permissions\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreateAuthorizationPermissionDto\"\n },\n \"security\": null,\n \"skill_name\": \"authorization_permissions_controller_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Create a permission\",\n \"tags\": [\n \"permissions\"\n ]\n },\n \"authorization_permissions_controller_delete\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Delete an existing permission. System permissions cannot be deleted.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"authorization_permissions_controller_delete\",\n \"parameters\": [\n {\n \"description\": \"A unique key to reference the permission. Must be lowercase and contain only letters, numbers, hyphens, underscores, colons, periods, and asterisks.\",\n \"in\": \"path\",\n \"name\": \"slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"documents:read\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/permissions/{slug}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorization_permissions_controller_delete\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Delete a permission\",\n \"tags\": [\n \"permissions\"\n ]\n },\n \"authorization_permissions_controller_find\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Retrieve a permission by its unique slug.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"authorization_permissions_controller_find\",\n \"parameters\": [\n {\n \"description\": \"A unique key to reference the permission. Must be lowercase and contain only letters, numbers, hyphens, underscores, colons, periods, and asterisks.\",\n \"in\": \"path\",\n \"name\": \"slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"documents:read\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/permissions/{slug}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorization_permissions_controller_find\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get a permission\",\n \"tags\": [\n \"permissions\"\n ]\n },\n \"authorization_permissions_controller_list\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get a list of all permissions in your WorkOS environment.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"authorization_permissions_controller_list\",\n \"parameters\": [\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ987654321KJIHGFEDCBA\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"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).\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n }\n ],\n \"path\": \"/authorization/permissions\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorization_permissions_controller_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List permissions\",\n \"tags\": [\n \"permissions\"\n ]\n },\n \"authorization_permissions_controller_update\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Update an existing permission. Only the fields provided in the request body will be updated.\",\n \"destructive\": true,\n \"method\": \"PATCH\",\n \"operation_id\": \"authorization_permissions_controller_update\",\n \"parameters\": [\n {\n \"description\": \"A unique key to reference the permission. Must be lowercase and contain only letters, numbers, hyphens, underscores, colons, periods, and asterisks.\",\n \"in\": \"path\",\n \"name\": \"slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"documents:read\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/permissions/{slug}\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UpdateAuthorizationPermissionDto\"\n },\n \"security\": null,\n \"skill_name\": \"authorization_permissions_controller_update\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Update a permission\",\n \"tags\": [\n \"permissions\"\n ]\n },\n \"authorization_resources_by_external_id_controller_delete_by_external_id\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Delete an authorization resource by organization, resource type, and external ID. This also deletes all descendant resources.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"authorization_resources_by_external_id_controller_delete_by_external_id\",\n \"parameters\": [\n {\n \"description\": \"The ID of the organization that owns the resource.\",\n \"in\": \"path\",\n \"name\": \"organization_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The slug of the resource type.\",\n \"in\": \"path\",\n \"name\": \"resource_type_slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"project\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"An identifier you provide to reference the resource in your system.\",\n \"in\": \"path\",\n \"name\": \"external_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"proj-456\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"If true, deletes all descendant resources and role assignments. If not set and the resource has children or assignments, the request will fail.\",\n \"in\": \"query\",\n \"name\": \"cascade_delete\",\n \"required\": false,\n \"schema\": {\n \"default\": false,\n \"example\": false,\n \"type\": \"boolean\"\n }\n }\n ],\n \"path\": \"/authorization/organizations/{organization_id}/resources/{resource_type_slug}/{external_id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorization_resources_by_external_id_controller_delete_by_external_id\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Delete an authorization resource by external ID\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_resources_by_external_id_controller_get_by_external_id\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Retrieve the details of an authorization resource by its external ID, organization, and resource type. This is useful when you only have the external ID from your system and need to fetch the full resource details.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"authorization_resources_by_external_id_controller_get_by_external_id\",\n \"parameters\": [\n {\n \"description\": \"The ID of the organization that owns the resource.\",\n \"in\": \"path\",\n \"name\": \"organization_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The slug of the resource type.\",\n \"in\": \"path\",\n \"name\": \"resource_type_slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"project\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"An identifier you provide to reference the resource in your system.\",\n \"in\": \"path\",\n \"name\": \"external_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"proj-456\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/organizations/{organization_id}/resources/{resource_type_slug}/{external_id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorization_resources_by_external_id_controller_get_by_external_id\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get a resource by external ID\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_resources_by_external_id_controller_list_organization_memberships_\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Returns all organization memberships that have a specific permission on a resource, using the resource's external ID. This is useful for answering \\\"Who can access this resource?\\\" when you only have the external ID.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"authorization_resources_by_external_id_controller_list_organization_memberships_\",\n \"parameters\": [\n {\n \"description\": \"The ID of the organization that owns the resource.\",\n \"in\": \"path\",\n \"name\": \"organization_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The slug of the resource type this resource belongs to.\",\n \"in\": \"path\",\n \"name\": \"resource_type_slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"project\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"An identifier you provide to reference the resource in your system.\",\n \"in\": \"path\",\n \"name\": \"external_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"proj-456\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ987654321KJIHGFEDCBA\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"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).\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n },\n {\n \"description\": \"The permission slug to filter by. Only users with this permission on the resource are returned.\",\n \"in\": \"query\",\n \"name\": \"permission_slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"project:read\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Filter by assignment type. Use \\\"direct\\\" for direct assignments only, or \\\"indirect\\\" to include inherited assignments.\",\n \"in\": \"query\",\n \"name\": \"assignment\",\n \"required\": false,\n \"schema\": {\n \"enum\": [\n \"direct\",\n \"indirect\"\n ],\n \"example\": \"direct\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/organizations/{organization_id}/resources/{resource_type_slug}/{external_id}/organization_memberships\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorization_resources_by_external_id_controller_list_organization_memberships_\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List memberships for a resource by external ID\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_resources_by_external_id_controller_update_by_external_id\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Update an existing authorization resource using its external ID.\",\n \"destructive\": true,\n \"method\": \"PATCH\",\n \"operation_id\": \"authorization_resources_by_external_id_controller_update_by_external_id\",\n \"parameters\": [\n {\n \"description\": \"The ID of the organization that owns the resource.\",\n \"in\": \"path\",\n \"name\": \"organization_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The slug of the resource type.\",\n \"in\": \"path\",\n \"name\": \"resource_type_slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"project\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"An identifier you provide to reference the resource in your system.\",\n \"in\": \"path\",\n \"name\": \"external_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"proj-456\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/organizations/{organization_id}/resources/{resource_type_slug}/{external_id}\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UpdateAuthorizationResourceDto\"\n },\n \"security\": null,\n \"skill_name\": \"authorization_resources_by_external_id_controller_update_by_external_id\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Update a resource by external ID\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_resources_controller_create\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Create a new authorization resource.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"authorization_resources_controller_create\",\n \"parameters\": [],\n \"path\": \"/authorization/resources\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreateAuthorizationResourceDto\"\n },\n \"security\": null,\n \"skill_name\": \"authorization_resources_controller_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Create an authorization resource\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_resources_controller_delete\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Delete an authorization resource and all its descendants.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"authorization_resources_controller_delete\",\n \"parameters\": [\n {\n \"description\": \"The ID of the authorization resource.\",\n \"in\": \"path\",\n \"name\": \"resource_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"authz_resource_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"If true, deletes all descendant resources and role assignments. If not set and the resource has children or assignments, the request will fail.\",\n \"in\": \"query\",\n \"name\": \"cascade_delete\",\n \"required\": false,\n \"schema\": {\n \"default\": false,\n \"example\": false,\n \"type\": \"boolean\"\n }\n }\n ],\n \"path\": \"/authorization/resources/{resource_id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorization_resources_controller_delete\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Delete an authorization resource\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_resources_controller_find_by_id\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Retrieve the details of an authorization resource by its ID.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"authorization_resources_controller_find_by_id\",\n \"parameters\": [\n {\n \"description\": \"The ID of the authorization resource.\",\n \"in\": \"path\",\n \"name\": \"resource_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"authz_resource_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/resources/{resource_id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorization_resources_controller_find_by_id\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get a resource\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_resources_controller_list\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get a paginated list of authorization resources.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"authorization_resources_controller_list\",\n \"parameters\": [\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ987654321KJIHGFEDCBA\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"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).\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n },\n {\n \"description\": \"Filter resources by organization ID.\",\n \"in\": \"query\",\n \"name\": \"organization_id\",\n \"required\": false,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Filter resources by resource type slug.\",\n \"in\": \"query\",\n \"name\": \"resource_type_slug\",\n \"required\": false,\n \"schema\": {\n \"example\": \"project\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Filter resources by external ID.\",\n \"in\": \"query\",\n \"name\": \"resource_external_id\",\n \"required\": false,\n \"schema\": {\n \"example\": \"my-project-123\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Filter resources by parent resource ID. Mutually exclusive with `parent_resource_type_slug` and `parent_external_id`.\",\n \"in\": \"query\",\n \"name\": \"parent_resource_id\",\n \"required\": false,\n \"schema\": {\n \"example\": \"authz_resource_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Filter resources by parent resource type slug. Required with `parent_external_id`. Mutually exclusive with `parent_resource_id`.\",\n \"in\": \"query\",\n \"name\": \"parent_resource_type_slug\",\n \"required\": false,\n \"schema\": {\n \"example\": \"workspace\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Filter resources by parent external ID. Required with `parent_resource_type_slug`. Mutually exclusive with `parent_resource_id`.\",\n \"in\": \"query\",\n \"name\": \"parent_external_id\",\n \"required\": false,\n \"schema\": {\n \"example\": \"ext-workspace-123\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/resources\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorization_resources_controller_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List resources\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_resources_controller_list_organization_memberships_for_resource\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Returns all organization memberships that have a specific permission on a resource instance. This is useful for answering \\\"Who can access this resource?\\\".\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"authorization_resources_controller_list_organization_memberships_for_resource\",\n \"parameters\": [\n {\n \"description\": \"The ID of the authorization resource.\",\n \"in\": \"path\",\n \"name\": \"resource_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"authz_resource_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ987654321KJIHGFEDCBA\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"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).\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n },\n {\n \"description\": \"The permission slug to filter by. Only users with this permission on the resource are returned.\",\n \"in\": \"query\",\n \"name\": \"permission_slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"document:edit\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Filter by assignment type. Use `direct` for direct assignments only, or `indirect` to include inherited assignments.\",\n \"in\": \"query\",\n \"name\": \"assignment\",\n \"required\": false,\n \"schema\": {\n \"enum\": [\n \"direct\",\n \"indirect\"\n ],\n \"example\": \"direct\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/resources/{resource_id}/organization_memberships\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorization_resources_controller_list_organization_memberships_for_resource\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List organization memberships for resource\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_resources_controller_update\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Update an existing authorization resource.\",\n \"destructive\": true,\n \"method\": \"PATCH\",\n \"operation_id\": \"authorization_resources_controller_update\",\n \"parameters\": [\n {\n \"description\": \"The ID of the authorization resource.\",\n \"in\": \"path\",\n \"name\": \"resource_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"authz_resource_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/resources/{resource_id}\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UpdateAuthorizationResourceDto\"\n },\n \"security\": null,\n \"skill_name\": \"authorization_resources_controller_update\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Update a resource\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_role_assignments_controller_assign_role\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Assign a role to an organization membership on a specific resource.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"authorization_role_assignments_controller_assign_role\",\n \"parameters\": [\n {\n \"description\": \"The ID of the organization membership.\",\n \"in\": \"path\",\n \"name\": \"organization_membership_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"om_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/organization_memberships/{organization_membership_id}/role_assignments\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/AssignRoleDto\"\n },\n \"security\": null,\n \"skill_name\": \"authorization_role_assignments_controller_assign_role\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Assign a role\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_role_assignments_controller_list_role_assignments\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"List all role assignments for an organization membership. This returns all roles that have been assigned to the user on resources, including organization-level and sub-resource roles.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"authorization_role_assignments_controller_list_role_assignments\",\n \"parameters\": [\n {\n \"description\": \"The ID of the organization membership.\",\n \"in\": \"path\",\n \"name\": \"organization_membership_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"om_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ987654321KJIHGFEDCBA\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"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).\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n },\n {\n \"description\": \"Filter assignments by the ID of the resource.\",\n \"in\": \"query\",\n \"name\": \"resource_id\",\n \"required\": false,\n \"schema\": {\n \"example\": \"authz_resource_01HXYZ123456789ABCDEFGH\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Filter assignments by the external ID of the resource.\",\n \"in\": \"query\",\n \"name\": \"resource_external_id\",\n \"required\": false,\n \"schema\": {\n \"example\": \"project-ext-456\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Filter assignments by the slug of the resource type.\",\n \"in\": \"query\",\n \"name\": \"resource_type_slug\",\n \"required\": false,\n \"schema\": {\n \"example\": \"project\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/organization_memberships/{organization_membership_id}/role_assignments\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorization_role_assignments_controller_list_role_assignments\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List role assignments\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_role_assignments_controller_list_role_assignments_for_resource\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"List all role assignments granted on a specific resource instance. Each assignment includes the organization membership it was granted to.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"authorization_role_assignments_controller_list_role_assignments_for_resource\",\n \"parameters\": [\n {\n \"description\": \"The ID of the authorization resource.\",\n \"in\": \"path\",\n \"name\": \"resource_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"authz_resource_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ987654321KJIHGFEDCBA\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"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).\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n },\n {\n \"description\": \"Filter assignments by the slug of the role.\",\n \"in\": \"query\",\n \"name\": \"role_slug\",\n \"required\": false,\n \"schema\": {\n \"example\": \"editor\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/resources/{resource_id}/role_assignments\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorization_role_assignments_controller_list_role_assignments_for_resource\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List role assignments for a resource\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_role_assignments_controller_list_role_assignments_for_resource_by_\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"List all role assignments granted on a resource, identified by its external ID. Each assignment includes the organization membership it was granted to.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"authorization_role_assignments_controller_list_role_assignments_for_resource_by_\",\n \"parameters\": [\n {\n \"description\": \"The ID of the organization that owns the resource.\",\n \"in\": \"path\",\n \"name\": \"organization_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The slug of the resource type.\",\n \"in\": \"path\",\n \"name\": \"resource_type_slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"project\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"An identifier you provide to reference the resource in your system.\",\n \"in\": \"path\",\n \"name\": \"external_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"proj-456\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ987654321KJIHGFEDCBA\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"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).\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n },\n {\n \"description\": \"Filter assignments by the slug of the role.\",\n \"in\": \"query\",\n \"name\": \"role_slug\",\n \"required\": false,\n \"schema\": {\n \"example\": \"editor\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/organizations/{organization_id}/resources/{resource_type_slug}/{external_id}/role_assignments\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorization_role_assignments_controller_list_role_assignments_for_resource_by_\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List role assignments for a resource by external ID\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_role_assignments_controller_remove_role_by_criteria\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Remove a role assignment by role slug and resource.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"authorization_role_assignments_controller_remove_role_by_criteria\",\n \"parameters\": [\n {\n \"description\": \"The ID of the organization membership.\",\n \"in\": \"path\",\n \"name\": \"organization_membership_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"om_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/organization_memberships/{organization_membership_id}/role_assignments\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/RemoveRoleDto\"\n },\n \"security\": null,\n \"skill_name\": \"authorization_role_assignments_controller_remove_role_by_criteria\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Remove a role assignment\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_role_assignments_controller_remove_role_by_id\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Remove a role assignment using its ID.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"authorization_role_assignments_controller_remove_role_by_id\",\n \"parameters\": [\n {\n \"description\": \"The ID of the organization membership.\",\n \"in\": \"path\",\n \"name\": \"organization_membership_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"om_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The ID of the role assignment to remove.\",\n \"in\": \"path\",\n \"name\": \"role_assignment_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"role_assignment_01HXYZ123456789ABCDEFGH\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/organization_memberships/{organization_membership_id}/role_assignments/{role_assignment_id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorization_role_assignments_controller_remove_role_by_id\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Remove a role assignment by ID\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_role_permissions_controller_add_permission\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Add a single permission to an environment role. If the permission is already assigned to the role, this operation has no effect.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"authorization_role_permissions_controller_add_permission\",\n \"parameters\": [\n {\n \"description\": \"The slug of the environment role.\",\n \"in\": \"path\",\n \"name\": \"slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"admin\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/roles/{slug}/permissions\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/AddRolePermissionDto\"\n },\n \"security\": null,\n \"skill_name\": \"authorization_role_permissions_controller_add_permission\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Add a permission to an environment role\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_role_permissions_controller_set_permissions\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Replace all permissions on an environment role with the provided list.\",\n \"destructive\": true,\n \"method\": \"PUT\",\n \"operation_id\": \"authorization_role_permissions_controller_set_permissions\",\n \"parameters\": [\n {\n \"description\": \"The slug of the environment role.\",\n \"in\": \"path\",\n \"name\": \"slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"admin\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/roles/{slug}/permissions\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SetRolePermissionsDto\"\n },\n \"security\": null,\n \"skill_name\": \"authorization_role_permissions_controller_set_permissions\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Set permissions for an environment role\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_roles_controller_create\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Create a new environment role.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"authorization_roles_controller_create\",\n \"parameters\": [],\n \"path\": \"/authorization/roles\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreateRoleDto\"\n },\n \"security\": null,\n \"skill_name\": \"authorization_roles_controller_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Create an environment role\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_roles_controller_get\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get an environment role by its slug.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"authorization_roles_controller_get\",\n \"parameters\": [\n {\n \"description\": \"The slug of the environment role.\",\n \"in\": \"path\",\n \"name\": \"slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"admin\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/roles/{slug}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorization_roles_controller_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get an environment role\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_roles_controller_list\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"List all environment roles in priority order.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"authorization_roles_controller_list\",\n \"parameters\": [],\n \"path\": \"/authorization/roles\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorization_roles_controller_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List environment roles\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorization_roles_controller_update\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Update an existing environment role.\",\n \"destructive\": true,\n \"method\": \"PATCH\",\n \"operation_id\": \"authorization_roles_controller_update\",\n \"parameters\": [\n {\n \"description\": \"The slug of the environment role.\",\n \"in\": \"path\",\n \"name\": \"slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"admin\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/authorization/roles/{slug}\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UpdateRoleDto\"\n },\n \"security\": null,\n \"skill_name\": \"authorization_roles_controller_update\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Update an environment role\",\n \"tags\": [\n \"authorization\"\n ]\n },\n \"authorized_applications_controller_delete\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Delete an existing Authorized Connect Application.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"authorized_applications_controller_delete\",\n \"parameters\": [\n {\n \"description\": \"The ID or client ID of the application.\",\n \"in\": \"path\",\n \"name\": \"application_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"conn_app_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The ID of the user.\",\n \"in\": \"path\",\n \"name\": \"user_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"user_01E4ZCR3C56J083X43JQXF3JK5\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/users/{user_id}/authorized_applications/{application_id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorized_applications_controller_delete\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Delete an authorized application\",\n \"tags\": [\n \"user-management.users.authorized-applications\"\n ]\n },\n \"authorized_applications_controller_list\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get a list of all Connect applications that the user has authorized.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"authorized_applications_controller_list\",\n \"parameters\": [\n {\n \"description\": \"The ID of the user.\",\n \"in\": \"path\",\n \"name\": \"user_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"user_01E4ZCR3C56J083X43JQXF3JK5\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ987654321KJIHGFEDCBA\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"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).\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n }\n ],\n \"path\": \"/user_management/users/{user_id}/authorized_applications\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"authorized_applications_controller_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List authorized applications\",\n \"tags\": [\n \"user-management.users.authorized-applications\"\n ]\n },\n \"client_api_token_controller_issue_client_api_token\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Generate a short-lived, session-bound token for the Client GraphQL API, scoped to an organization and user.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"client_api_token_controller_issue_client_api_token\",\n \"parameters\": [],\n \"path\": \"/client/token\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ClientApiTokenDto\"\n },\n \"security\": null,\n \"skill_name\": \"client_api_token_controller_issue_client_api_token\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Generate a Client API token\",\n \"tags\": [\n \"client\"\n ]\n },\n \"connections_controller_delete\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Permanently deletes an existing connection. It cannot be undone.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"connections_controller_delete\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier for the Connection.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"conn_01E4ZCR3C56J083X43JQXF3JK5\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/connections/{id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"connections_controller_delete\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Delete a Connection\",\n \"tags\": [\n \"connections\"\n ]\n },\n \"connections_controller_find\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get the details of an existing connection.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"connections_controller_find\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier for the Connection.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"conn_01E4ZCR3C56J083X43JQXF3JK5\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/connections/{id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"connections_controller_find\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get a Connection\",\n \"tags\": [\n \"connections\"\n ]\n },\n \"connections_controller_list\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get a list of all of your existing connections matching the criteria specified.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"connections_controller_list\",\n \"parameters\": [\n {\n \"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.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"obj_1234567890\",\n \"type\": \"string\"\n }\n },\n {\n \"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.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"obj_1234567890\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Order the results by the creation time.\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n },\n {\n \"description\": \"Filter Connections by their type.\",\n \"in\": \"query\",\n \"name\": \"connection_type\",\n \"required\": false,\n \"schema\": {\n \"enum\": [\n \"ADFSSAML\",\n \"AdpOidc\",\n \"AppleOAuth\",\n \"Auth0SAML\",\n \"AzureSAML\",\n \"BitbucketOAuth\",\n \"CasSAML\",\n \"CloudflareSAML\",\n \"ClassLinkSAML\",\n \"CleverOIDC\",\n \"CyberArkSAML\",\n \"DiscordOAuth\",\n \"DuoSAML\",\n \"EntraIdOIDC\",\n \"GenericOIDC\",\n \"GenericSAML\",\n \"GithubOAuth\",\n \"GitLabOAuth\",\n \"GoogleOAuth\",\n \"GoogleOIDC\",\n \"GoogleSAML\",\n \"IntuitOAuth\",\n \"JumpCloudSAML\",\n \"KeycloakSAML\",\n \"LastPassSAML\",\n \"LinkedInOAuth\",\n \"LoginGovOidc\",\n \"MagicLink\",\n \"MicrosoftOAuth\",\n \"MiniOrangeSAML\",\n \"NetIqSAML\",\n \"OktaOIDC\",\n \"OktaSAML\",\n \"OneLoginSAML\",\n \"OracleSAML\",\n \"PingFederateSAML\",\n \"PingOneSAML\",\n \"RipplingSAML\",\n \"SalesforceSAML\",\n \"ShibbolethGenericSAML\",\n \"ShibbolethSAML\",\n \"SimpleSamlPhpSAML\",\n \"SalesforceOAuth\",\n \"SlackOAuth\",\n \"VercelMarketplaceOAuth\",\n \"VercelOAuth\",\n \"VMwareSAML\",\n \"XeroOAuth\"\n ],\n \"example\": \"GithubOAuth\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Filter Connections by their associated domain.\",\n \"in\": \"query\",\n \"name\": \"domain\",\n \"required\": false,\n \"schema\": {\n \"example\": \"foo-corp.com\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Filter Connections by their associated organization.\",\n \"in\": \"query\",\n \"name\": \"organization_id\",\n \"required\": false,\n \"schema\": {\n \"example\": \"org_01EHWNCE74X7JSDV0X3SZ3KJNY\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Searchable text to match against Connection names.\",\n \"in\": \"query\",\n \"name\": \"search\",\n \"required\": false,\n \"schema\": {\n \"example\": \"Foo Corp\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/connections\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"connections_controller_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List Connections\",\n \"tags\": [\n \"connections\"\n ]\n },\n \"cors_origins_controller_create_cors_origin\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Creates a new CORS origin for the current environment. CORS origins allow browser-based applications to make requests to the WorkOS API.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"cors_origins_controller_create_cors_origin\",\n \"parameters\": [],\n \"path\": \"/user_management/cors_origins\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreateCorsOriginDto\"\n },\n \"security\": null,\n \"skill_name\": \"cors_origins_controller_create_cors_origin\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Create a CORS origin\",\n \"tags\": [\n \"user-management.cors-origins\"\n ]\n },\n \"data_integrations_controller_get_data_integration_authorize_url\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Generates an OAuth authorization URL to initiate the connection flow for a user. Redirect the user to the returned URL to begin the OAuth flow with the third-party provider.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"data_integrations_controller_get_data_integration_authorize_url\",\n \"parameters\": [\n {\n \"description\": \"The slug identifier of the provider (e.g., `github`, `slack`, `notion`).\",\n \"in\": \"path\",\n \"name\": \"slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"github\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/data-integrations/{slug}/authorize\",\n \"request_body\": {\n \"properties\": {\n \"organization_id\": {\n \"description\": \"An organization ID to scope the authorization to a specific organization.\",\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n },\n \"return_to\": {\n \"description\": \"The URL to redirect the user to after authorization.\",\n \"example\": \"https://example.com/callback\",\n \"format\": \"uri\",\n \"type\": \"string\"\n },\n \"user_id\": {\n \"description\": \"The ID of the user to authorize.\",\n \"example\": \"user_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"user_id\"\n ],\n \"type\": \"object\"\n },\n \"security\": null,\n \"skill_name\": \"data_integrations_controller_get_data_integration_authorize_url\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get authorization URL\",\n \"tags\": [\n \"pipes\"\n ]\n },\n \"data_integrations_controller_get_userland_user_token\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Fetches a valid OAuth access token for a user's connected account. WorkOS automatically handles token refresh, ensuring you always receive a valid, non-expired token.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"data_integrations_controller_get_userland_user_token\",\n \"parameters\": [\n {\n \"description\": \"The identifier of the integration.\",\n \"in\": \"path\",\n \"name\": \"slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"github\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/data-integrations/{slug}/token\",\n \"request_body\": {\n \"properties\": {\n \"organization_id\": {\n \"description\": \"An [Organization](/reference/organization) identifier. Optional parameter to scope the connection to a specific organization.\",\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n },\n \"user_id\": {\n \"description\": \"A [User](/reference/authkit/user) identifier.\",\n \"example\": \"user_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"user_id\"\n ],\n \"type\": \"object\"\n },\n \"security\": null,\n \"skill_name\": \"data_integrations_controller_get_userland_user_token\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get an access token for a connected account\",\n \"tags\": [\n \"pipes\"\n ]\n },\n \"data_integrations_user_management_controller_delete_user_data_installation\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Disconnects WorkOS's account for the user, including removing any stored access and refresh tokens. The user will need to reauthorize if they want to reconnect. This does not revoke access on the provider side.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"data_integrations_user_management_controller_delete_user_data_installation\",\n \"parameters\": [\n {\n \"description\": \"A [User](/reference/authkit/user) identifier.\",\n \"in\": \"path\",\n \"name\": \"user_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"user_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The slug identifier of the provider (e.g., `github`, `slack`, `notion`).\",\n \"in\": \"path\",\n \"name\": \"slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"github\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"An [Organization](/reference/organization) identifier. Optional parameter if the connection is scoped to an organization.\",\n \"in\": \"query\",\n \"name\": \"organization_id\",\n \"required\": false,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/users/{user_id}/connected_accounts/{slug}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"data_integrations_user_management_controller_delete_user_data_installation\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Delete a connected account\",\n \"tags\": [\n \"user-management.data-providers\"\n ]\n },\n \"data_integrations_user_management_controller_get_user_data_installation\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Retrieves a user's [connected account](/reference/pipes/connected-account) for a specific provider.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"data_integrations_user_management_controller_get_user_data_installation\",\n \"parameters\": [\n {\n \"description\": \"A [User](/reference/authkit/user) identifier.\",\n \"in\": \"path\",\n \"name\": \"user_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"user_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The slug identifier of the provider (e.g., `github`, `slack`, `notion`).\",\n \"in\": \"path\",\n \"name\": \"slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"github\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"An [Organization](/reference/organization) identifier. Optional parameter if the connection is scoped to an organization.\",\n \"in\": \"query\",\n \"name\": \"organization_id\",\n \"required\": false,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/users/{user_id}/connected_accounts/{slug}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"data_integrations_user_management_controller_get_user_data_installation\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get a connected account\",\n \"tags\": [\n \"user-management.data-providers\"\n ]\n },\n \"data_integrations_user_management_controller_get_user_data_integrations\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Retrieves a list of available providers and the user's connection status for each. Returns all providers configured for your environment, along with the user's [connected account](/reference/pipes/connected-account) information where applicable.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"data_integrations_user_management_controller_get_user_data_integrations\",\n \"parameters\": [\n {\n \"description\": \"A [User](/reference/authkit/user) identifier to list providers and connected accounts for.\",\n \"in\": \"path\",\n \"name\": \"user_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"user_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"An [Organization](/reference/organization) identifier. Optional parameter to filter connections for a specific organization.\",\n \"in\": \"query\",\n \"name\": \"organization_id\",\n \"required\": false,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/users/{user_id}/data_providers\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"data_integrations_user_management_controller_get_user_data_integrations\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List providers for a user\",\n \"tags\": [\n \"user-management.data-providers\"\n ]\n },\n \"directories_controller_delete_directory\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Permanently deletes an existing directory. It cannot be undone.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"directories_controller_delete_directory\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier for the Directory.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"directory_01ECAZ4NV9QMV47GW873HDCX74\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/directories/{id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"directories_controller_delete_directory\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Delete a Directory\",\n \"tags\": [\n \"directories\"\n ]\n },\n \"directories_controller_find\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get the details of an existing directory.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"directories_controller_find\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier for the Directory.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"directory_01ECAZ4NV9QMV47GW873HDCX74\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/directories/{id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"directories_controller_find\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get a Directory\",\n \"tags\": [\n \"directories\"\n ]\n },\n \"directories_controller_list\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get a list of all of your existing directories matching the criteria specified.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"directories_controller_list\",\n \"parameters\": [\n {\n \"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.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"obj_1234567890\",\n \"type\": \"string\"\n }\n },\n {\n \"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.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"obj_1234567890\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Order the results by the creation time.\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n },\n {\n \"description\": \"Filter Directories by their associated organization.\",\n \"in\": \"query\",\n \"name\": \"organization_id\",\n \"required\": false,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Searchable text to match against Directory names.\",\n \"in\": \"query\",\n \"name\": \"search\",\n \"required\": false,\n \"schema\": {\n \"example\": \"Foo Corp\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Filter Directories by their associated domain.\",\n \"in\": \"query\",\n \"name\": \"domain\",\n \"required\": false,\n \"schema\": {\n \"example\": \"foo-corp.com\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/directories\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"directories_controller_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List Directories\",\n \"tags\": [\n \"directories\"\n ]\n },\n \"directory_groups_controller_find\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get the details of an existing Directory Group.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"directory_groups_controller_find\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier for the Directory Group.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"directory_group_01E1JJS84MFPPQ3G655FHTKX6Z\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/directory_groups/{id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"directory_groups_controller_find\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get a Directory Group\",\n \"tags\": [\n \"directory-groups\"\n ]\n },\n \"directory_groups_controller_list\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get a list of all of existing directory groups matching the criteria specified.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"directory_groups_controller_list\",\n \"parameters\": [\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ987654321KJIHGFEDCBA\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"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).\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n },\n {\n \"description\": \"Unique identifier of the WorkOS Directory. This value can be obtained from the WorkOS dashboard or from the WorkOS API.\",\n \"in\": \"query\",\n \"name\": \"directory\",\n \"required\": false,\n \"schema\": {\n \"example\": \"directory_01ECAZ4NV9QMV47GW873HDCX74\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Unique identifier of the WorkOS Directory User. This value can be obtained from the WorkOS API.\",\n \"in\": \"query\",\n \"name\": \"user\",\n \"required\": false,\n \"schema\": {\n \"example\": \"directory_user_01E1JG7J09H96KYP8HM9B0G5SJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/directory_groups\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"directory_groups_controller_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List Directory Groups\",\n \"tags\": [\n \"directory-groups\"\n ]\n },\n \"directory_users_controller_find\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get the details of an existing Directory User.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"directory_users_controller_find\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier for the Directory User.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"directory_user_01E1JG7J09H96KYP8HM9B0G5SJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/directory_users/{id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"directory_users_controller_find\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get a Directory User\",\n \"tags\": [\n \"directory-users\"\n ]\n },\n \"directory_users_controller_list\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get a list of all of existing Directory Users matching the criteria specified.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"directory_users_controller_list\",\n \"parameters\": [\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ987654321KJIHGFEDCBA\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"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).\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n },\n {\n \"description\": \"Unique identifier of the WorkOS Directory. This value can be obtained from the WorkOS dashboard or from the WorkOS API.\",\n \"in\": \"query\",\n \"name\": \"directory\",\n \"required\": false,\n \"schema\": {\n \"example\": \"directory_01ECAZ4NV9QMV47GW873HDCX74\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Unique identifier of the WorkOS Directory Group. This value can be obtained from the WorkOS API.\",\n \"in\": \"query\",\n \"name\": \"group\",\n \"required\": false,\n \"schema\": {\n \"example\": \"directory_group_01E64QTDNS0EGJ0FMCVY9BWGZT\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Filter Directory Users by the identity provider's unique identifier (`idp_id`). Requires the `directory` parameter to also be provided.\",\n \"in\": \"query\",\n \"name\": \"idp_id\",\n \"required\": false,\n \"schema\": {\n \"example\": \"2836\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Filter Directory Users by their primary email address. Requires the `directory` parameter to also be provided.\",\n \"in\": \"query\",\n \"name\": \"email\",\n \"required\": false,\n \"schema\": {\n \"example\": \"jane.doe@example.com\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/directory_users\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"directory_users_controller_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List Directory Users\",\n \"tags\": [\n \"directory-users\"\n ]\n },\n \"events_controller_list\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"List events for the current environment.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"events_controller_list\",\n \"parameters\": [\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ987654321KJIHGFEDCBA\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"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).\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n },\n {\n \"description\": \"Filter events by one or more event types (e.g. `dsync.user.created`).\",\n \"in\": \"query\",\n \"name\": \"events\",\n \"required\": false,\n \"schema\": {\n \"example\": [\n \"dsync.user.created\",\n \"dsync.user.updated\"\n ],\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n }\n },\n {\n \"description\": \"ISO-8601 date string to filter events created after this date.\",\n \"in\": \"query\",\n \"name\": \"range_start\",\n \"required\": false,\n \"schema\": {\n \"example\": \"2025-01-01T00:00:00Z\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"ISO-8601 date string to filter events created before this date.\",\n \"in\": \"query\",\n \"name\": \"range_end\",\n \"required\": false,\n \"schema\": {\n \"example\": \"2025-12-31T23:59:59Z\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Filter events by the [Organization](/reference/organization) that the event is associated with.\",\n \"in\": \"query\",\n \"name\": \"organization_id\",\n \"required\": false,\n \"schema\": {\n \"example\": \"org_01EHQMYV6MBK39QC5PZXHY59C3\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/events\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"events_controller_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List events\",\n \"tags\": [\n \"events\"\n ]\n },\n \"external_auth_controller_complete_login\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Completes an external authentication flow and returns control to AuthKit. This endpoint is used with [Standalone Connect](/authkit/connect/standalone) to bridge your existing authentication system with the Connect OAuth API infrastructure.\\n\\nAfter successfully authenticating a user in your application, calling this endpoint will:\\n\\n- Create or update the user in AuthKit, using the given `id` as its `external_id`.\\n- Return a `redirect_uri` your application should redirect to in order for AuthKit to complete the flow\\n\\nUsers are automatically created or updated based on the `id` and `email` provided. If a user with the same `id` exists, their information is updated. Otherwise, a new user is created.\\n\\nIf you provide a new `id` with an `email` that already belongs to an existing user, the request will fail with an error as email addresses are unique to a user.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"external_auth_controller_complete_login\",\n \"parameters\": [],\n \"path\": \"/authkit/oauth2/complete\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UserManagementLoginRequest\"\n },\n \"security\": null,\n \"skill_name\": \"external_auth_controller_complete_login\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Complete external authentication\",\n \"tags\": [\n \"workos-connect\"\n ]\n },\n \"feature_flags_controller_disable_flag\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Disables a feature flag in the current environment.\",\n \"destructive\": true,\n \"method\": \"PUT\",\n \"operation_id\": \"feature_flags_controller_disable_flag\",\n \"parameters\": [\n {\n \"description\": \"A unique key to reference the Feature Flag.\",\n \"in\": \"path\",\n \"name\": \"slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"advanced-analytics\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/feature-flags/{slug}/disable\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"feature_flags_controller_disable_flag\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Disable a feature flag\",\n \"tags\": [\n \"feature-flags\"\n ]\n },\n \"feature_flags_controller_enable_flag\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Enables a feature flag in the current environment.\",\n \"destructive\": true,\n \"method\": \"PUT\",\n \"operation_id\": \"feature_flags_controller_enable_flag\",\n \"parameters\": [\n {\n \"description\": \"A unique key to reference the Feature Flag.\",\n \"in\": \"path\",\n \"name\": \"slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"advanced-analytics\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/feature-flags/{slug}/enable\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"feature_flags_controller_enable_flag\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Enable a feature flag\",\n \"tags\": [\n \"feature-flags\"\n ]\n },\n \"feature_flags_controller_find_by_slug\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get the details of an existing feature flag by its slug.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"feature_flags_controller_find_by_slug\",\n \"parameters\": [\n {\n \"description\": \"A unique key to reference the Feature Flag.\",\n \"in\": \"path\",\n \"name\": \"slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"advanced-analytics\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/feature-flags/{slug}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"feature_flags_controller_find_by_slug\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get a feature flag\",\n \"tags\": [\n \"feature-flags\"\n ]\n },\n \"feature_flags_controller_list\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get a list of all of your existing feature flags matching the criteria specified.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"feature_flags_controller_list\",\n \"parameters\": [\n {\n \"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.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"obj_1234567890\",\n \"type\": \"string\"\n }\n },\n {\n \"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.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"obj_1234567890\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Order the results by the creation time.\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n }\n ],\n \"path\": \"/feature-flags\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"feature_flags_controller_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List feature flags\",\n \"tags\": [\n \"feature-flags\"\n ]\n },\n \"flag_targets_controller_create_target\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Enables a feature flag for a specific target in the current environment. Currently, supported targets include users and organizations.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"flag_targets_controller_create_target\",\n \"parameters\": [\n {\n \"description\": \"The resource ID in format \\\"user_\\\" or \\\"org_\\\".\",\n \"in\": \"path\",\n \"name\": \"resourceId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"user_01234567890abcdef\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The unique slug identifier of the feature flag.\",\n \"in\": \"path\",\n \"name\": \"slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"beta-feature\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/feature-flags/{slug}/targets/{resourceId}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"flag_targets_controller_create_target\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Add a feature flag target\",\n \"tags\": [\n \"feature-flags.targets\"\n ]\n },\n \"flag_targets_controller_delete_target\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Removes a target from the feature flag's target list in the current environment. Currently, supported targets include users and organizations.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"flag_targets_controller_delete_target\",\n \"parameters\": [\n {\n \"description\": \"The resource ID in format \\\"user_\\\" or \\\"org_\\\".\",\n \"in\": \"path\",\n \"name\": \"resourceId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"user_01234567890abcdef\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The unique slug identifier of the feature flag.\",\n \"in\": \"path\",\n \"name\": \"slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"beta-feature\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/feature-flags/{slug}/targets/{resourceId}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"flag_targets_controller_delete_target\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Remove a feature flag target\",\n \"tags\": [\n \"feature-flags.targets\"\n ]\n },\n \"group_memberships_controller_add_member\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Add an organization membership to a group.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"group_memberships_controller_add_member\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier of the Organization.\",\n \"in\": \"path\",\n \"name\": \"organizationId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHWNCE74X7JSDV0X3SZ3KJNY\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Unique identifier of the Group.\",\n \"in\": \"path\",\n \"name\": \"groupId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"group_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/organizations/{organizationId}/groups/{groupId}/organization-memberships\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreateGroupMembershipDto\"\n },\n \"security\": null,\n \"skill_name\": \"group_memberships_controller_add_member\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Add a member to a Group\",\n \"tags\": [\n \"groups\"\n ]\n },\n \"group_memberships_controller_list_members\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get a list of organization memberships in a group.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"group_memberships_controller_list_members\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier of the Organization.\",\n \"in\": \"path\",\n \"name\": \"organizationId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHWNCE74X7JSDV0X3SZ3KJNY\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Unique identifier of the Group.\",\n \"in\": \"path\",\n \"name\": \"groupId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"group_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ987654321KJIHGFEDCBA\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"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).\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n }\n ],\n \"path\": \"/organizations/{organizationId}/groups/{groupId}/organization-memberships\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"group_memberships_controller_list_members\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List Group members\",\n \"tags\": [\n \"groups\"\n ]\n },\n \"group_memberships_controller_remove_member\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Remove an organization membership from a group.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"group_memberships_controller_remove_member\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier of the Organization.\",\n \"in\": \"path\",\n \"name\": \"organizationId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHWNCE74X7JSDV0X3SZ3KJNY\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Unique identifier of the Group.\",\n \"in\": \"path\",\n \"name\": \"groupId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"group_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Unique identifier of the Organization Membership.\",\n \"in\": \"path\",\n \"name\": \"omId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"om_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/organizations/{organizationId}/groups/{groupId}/organization-memberships/{omId}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"group_memberships_controller_remove_member\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Remove a member from a Group\",\n \"tags\": [\n \"groups\"\n ]\n },\n \"groups_controller_create\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Create a new group within an organization.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"groups_controller_create\",\n \"parameters\": [\n {\n \"description\": \"The ID of the organization.\",\n \"in\": \"path\",\n \"name\": \"organizationId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHWNCE74X7JSDV0X3SZ3KJNY\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/organizations/{organizationId}/groups\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreateGroupDto\"\n },\n \"security\": null,\n \"skill_name\": \"groups_controller_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Create a group\",\n \"tags\": [\n \"groups\"\n ]\n },\n \"groups_controller_delete\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Delete a group from an organization.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"groups_controller_delete\",\n \"parameters\": [\n {\n \"description\": \"The ID of the organization.\",\n \"in\": \"path\",\n \"name\": \"organizationId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHWNCE74X7JSDV0X3SZ3KJNY\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The ID of the group.\",\n \"in\": \"path\",\n \"name\": \"groupId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"group_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/organizations/{organizationId}/groups/{groupId}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"groups_controller_delete\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Delete a group\",\n \"tags\": [\n \"groups\"\n ]\n },\n \"groups_controller_get\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Retrieve a group by its ID within an organization.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"groups_controller_get\",\n \"parameters\": [\n {\n \"description\": \"The ID of the organization.\",\n \"in\": \"path\",\n \"name\": \"organizationId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHWNCE74X7JSDV0X3SZ3KJNY\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The ID of the group.\",\n \"in\": \"path\",\n \"name\": \"groupId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"group_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/organizations/{organizationId}/groups/{groupId}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"groups_controller_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get a group\",\n \"tags\": [\n \"groups\"\n ]\n },\n \"groups_controller_list\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get a paginated list of groups within an organization.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"groups_controller_list\",\n \"parameters\": [\n {\n \"description\": \"The ID of the organization.\",\n \"in\": \"path\",\n \"name\": \"organizationId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHWNCE74X7JSDV0X3SZ3KJNY\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ987654321KJIHGFEDCBA\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"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).\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n }\n ],\n \"path\": \"/organizations/{organizationId}/groups\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"groups_controller_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List groups\",\n \"tags\": [\n \"groups\"\n ]\n },\n \"groups_controller_update\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Update an existing group. Only the fields provided in the request body will be updated.\",\n \"destructive\": true,\n \"method\": \"PATCH\",\n \"operation_id\": \"groups_controller_update\",\n \"parameters\": [\n {\n \"description\": \"The ID of the organization.\",\n \"in\": \"path\",\n \"name\": \"organizationId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHWNCE74X7JSDV0X3SZ3KJNY\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The ID of the group.\",\n \"in\": \"path\",\n \"name\": \"groupId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"group_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/organizations/{organizationId}/groups/{groupId}\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UpdateGroupDto\"\n },\n \"security\": null,\n \"skill_name\": \"groups_controller_update\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Update a group\",\n \"tags\": [\n \"groups\"\n ]\n },\n \"jump_wire_web_data_vault_controller_create\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Encrypt and store a new key-value object.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"jump_wire_web_data_vault_controller_create\",\n \"parameters\": [],\n \"path\": \"/vault/v1/kv\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreateObjectRequest\"\n },\n \"security\": null,\n \"skill_name\": \"jump_wire_web_data_vault_controller_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Create an object\",\n \"tags\": [\n \"vault\"\n ]\n },\n \"jump_wire_web_data_vault_controller_delete\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Delete an encrypted object.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"jump_wire_web_data_vault_controller_delete\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier of the object.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Expected current version for optimistic locking.\",\n \"in\": \"query\",\n \"name\": \"version_check\",\n \"required\": false,\n \"schema\": {\n \"example\": \"c3d4e5f6-7890-abcd-ef12-34567890abcd\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/vault/v1/kv/{id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"jump_wire_web_data_vault_controller_delete\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Delete an object\",\n \"tags\": [\n \"vault\"\n ]\n },\n \"jump_wire_web_data_vault_controller_describe\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Fetch metadata for an object without decrypting it.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"jump_wire_web_data_vault_controller_describe\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier of the object.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/vault/v1/kv/{id}/metadata\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"jump_wire_web_data_vault_controller_describe\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Describe an object\",\n \"tags\": [\n \"vault\"\n ]\n },\n \"jump_wire_web_data_vault_controller_index\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"List all encrypted objects with cursor-based pagination.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"jump_wire_web_data_vault_controller_index\",\n \"parameters\": [\n {\n \"description\": \"Upper limit on the number of objects to return.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Cursor for the previous page of results.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"b21f3a8c-7e4d-4b1a-9c5e-2d8f6a7b3c4e\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Cursor for the next page of results.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"a10e2b7d-6c3f-4a2b-8d1e-3f9a5b8c7d6e\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Sort direction for results.\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"enum\": [\n \"asc\",\n \"desc\"\n ],\n \"example\": \"desc\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Filter results by name or structured search JSON.\",\n \"in\": \"query\",\n \"name\": \"search\",\n \"required\": false,\n \"schema\": {\n \"example\": \"my-secret\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"ISO 8601 timestamp to filter by last modified time.\",\n \"in\": \"query\",\n \"name\": \"updatedAfter\",\n \"required\": false,\n \"schema\": {\n \"example\": \"2024-01-01T00:00:00Z\",\n \"format\": \"date-time\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/vault/v1/kv\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"jump_wire_web_data_vault_controller_index\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List objects\",\n \"tags\": [\n \"vault\"\n ]\n },\n \"jump_wire_web_data_vault_controller_show_by_id\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Fetch and decrypt an object by its unique identifier.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"jump_wire_web_data_vault_controller_show_by_id\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier of the object.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/vault/v1/kv/{id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"jump_wire_web_data_vault_controller_show_by_id\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Read an object by ID\",\n \"tags\": [\n \"vault\"\n ]\n },\n \"jump_wire_web_data_vault_controller_show_by_name\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Fetch and decrypt an object by its unique name.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"jump_wire_web_data_vault_controller_show_by_name\",\n \"parameters\": [\n {\n \"description\": \"Unique name of the object.\",\n \"in\": \"path\",\n \"name\": \"name\",\n \"required\": true,\n \"schema\": {\n \"example\": \"my-secret\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/vault/v1/kv/name/{name}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"jump_wire_web_data_vault_controller_show_by_name\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Read an object by name\",\n \"tags\": [\n \"vault\"\n ]\n },\n \"jump_wire_web_data_vault_controller_update\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Update the value of an existing encrypted object.\",\n \"destructive\": true,\n \"method\": \"PUT\",\n \"operation_id\": \"jump_wire_web_data_vault_controller_update\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier of the object.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/vault/v1/kv/{id}\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UpdateObjectRequest\"\n },\n \"security\": null,\n \"skill_name\": \"jump_wire_web_data_vault_controller_update\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Update an object\",\n \"tags\": [\n \"vault\"\n ]\n },\n \"jump_wire_web_data_vault_controller_versions\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Retrieve all versions for a specific object.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"jump_wire_web_data_vault_controller_versions\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier of the object.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/vault/v1/kv/{id}/versions\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"jump_wire_web_data_vault_controller_versions\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List object versions\",\n \"tags\": [\n \"vault\"\n ]\n },\n \"jump_wire_web_key_controller_create_data_key\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Generate an isolated encryption key for local encryption operations.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"jump_wire_web_key_controller_create_data_key\",\n \"parameters\": [],\n \"path\": \"/vault/v1/keys/data-key\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreateDataKeyRequest\"\n },\n \"security\": null,\n \"skill_name\": \"jump_wire_web_key_controller_create_data_key\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Create a data key\",\n \"tags\": [\n \"vault\"\n ]\n },\n \"jump_wire_web_key_controller_decrypt\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Decrypt a previously encrypted data key from WorkOS Vault.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"jump_wire_web_key_controller_decrypt\",\n \"parameters\": [],\n \"path\": \"/vault/v1/keys/decrypt\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/DecryptRequest\"\n },\n \"security\": null,\n \"skill_name\": \"jump_wire_web_key_controller_decrypt\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Decrypt a data key\",\n \"tags\": [\n \"vault\"\n ]\n },\n \"jump_wire_web_key_controller_rekey\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Decrypt an existing data key and re-encrypt it under a new key context.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"jump_wire_web_key_controller_rekey\",\n \"parameters\": [],\n \"path\": \"/vault/v1/keys/rekey\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/RekeyRequest\"\n },\n \"security\": null,\n \"skill_name\": \"jump_wire_web_key_controller_rekey\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Re-encrypt a data key\",\n \"tags\": [\n \"vault\"\n ]\n },\n \"jwt_templates_controller_get_jwt_template\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get the JWT template for the current environment.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"jwt_templates_controller_get_jwt_template\",\n \"parameters\": [],\n \"path\": \"/user_management/jwt_template\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"jwt_templates_controller_get_jwt_template\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get JWT template\",\n \"tags\": [\n \"user-management.jwt-template\"\n ]\n },\n \"jwt_templates_controller_update_jwt_template\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Update the JWT template for the current environment.\",\n \"destructive\": true,\n \"method\": \"PUT\",\n \"operation_id\": \"jwt_templates_controller_update_jwt_template\",\n \"parameters\": [],\n \"path\": \"/user_management/jwt_template\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UpdateJwtTemplateDto\"\n },\n \"security\": null,\n \"skill_name\": \"jwt_templates_controller_update_jwt_template\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Update JWT template\",\n \"tags\": [\n \"user-management.jwt-template\"\n ]\n },\n \"organization_api_keys_controller_create\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Create a new API key for an organization.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"organization_api_keys_controller_create\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier of the Organization.\",\n \"in\": \"path\",\n \"name\": \"organizationId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/organizations/{organizationId}/api_keys\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreateOrganizationApiKeyDto\"\n },\n \"security\": null,\n \"skill_name\": \"organization_api_keys_controller_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Create an API key for an organization\",\n \"tags\": [\n \"organizations.api_keys\"\n ]\n },\n \"organization_api_keys_controller_list\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get a list of all API keys for an organization.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"organization_api_keys_controller_list\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier of the Organization.\",\n \"in\": \"path\",\n \"name\": \"organizationId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n },\n {\n \"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.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"obj_1234567890\",\n \"type\": \"string\"\n }\n },\n {\n \"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.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"obj_1234567890\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Order the results by the creation time.\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n }\n ],\n \"path\": \"/organizations/{organizationId}/api_keys\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"organization_api_keys_controller_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List API keys for an organization\",\n \"tags\": [\n \"organizations.api_keys\"\n ]\n },\n \"organization_domains_controller_create\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Creates a new Organization Domain.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"organization_domains_controller_create\",\n \"parameters\": [],\n \"path\": \"/organization_domains\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreateOrganizationDomainDto\"\n },\n \"security\": null,\n \"skill_name\": \"organization_domains_controller_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Create an Organization Domain\",\n \"tags\": [\n \"organization-domains\"\n ]\n },\n \"organization_domains_controller_delete\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Permanently deletes an organization domain. It cannot be undone.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"organization_domains_controller_delete\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier of the organization domain.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_domain_01EHZNVPK2QXHMVWCEDQEKY69A\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/organization_domains/{id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"organization_domains_controller_delete\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Delete an Organization Domain\",\n \"tags\": [\n \"organization-domains\"\n ]\n },\n \"organization_domains_controller_get\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get the details of an existing organization domain.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"organization_domains_controller_get\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier of the organization domain.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_domain_01EHZNVPK2QXHMVWCEDQEKY69A\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/organization_domains/{id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"organization_domains_controller_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get an Organization Domain\",\n \"tags\": [\n \"organization-domains\"\n ]\n },\n \"organization_domains_controller_verify\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Initiates verification process for an Organization Domain.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"organization_domains_controller_verify\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier of the organization domain.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_domain_01EHZNVPK2QXHMVWCEDQEKY69A\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/organization_domains/{id}/verify\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"organization_domains_controller_verify\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Verify an Organization Domain\",\n \"tags\": [\n \"organization-domains\"\n ]\n },\n \"organization_feature_flags_controller_list\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get a list of all enabled feature flags for an organization.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"organization_feature_flags_controller_list\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier of the Organization.\",\n \"in\": \"path\",\n \"name\": \"organizationId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n },\n {\n \"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.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"obj_1234567890\",\n \"type\": \"string\"\n }\n },\n {\n \"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.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"obj_1234567890\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Order the results by the creation time.\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n }\n ],\n \"path\": \"/organizations/{organizationId}/feature-flags\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"organization_feature_flags_controller_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List enabled feature flags for an organization\",\n \"tags\": [\n \"organizations.feature-flags\"\n ]\n },\n \"organization_membership_groups_controller_list_groups\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get a list of groups that an organization membership belongs to.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"organization_membership_groups_controller_list_groups\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier of the Organization Membership.\",\n \"in\": \"path\",\n \"name\": \"omId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"om_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ987654321KJIHGFEDCBA\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"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).\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n }\n ],\n \"path\": \"/user_management/organization_memberships/{omId}/groups\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"organization_membership_groups_controller_list_groups\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List groups\",\n \"tags\": [\n \"user-management.organization-membership.groups\"\n ]\n },\n \"organizations_controller_create\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Creates a new organization in the current environment.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"organizations_controller_create\",\n \"parameters\": [],\n \"path\": \"/organizations\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/OrganizationDto\"\n },\n \"security\": null,\n \"skill_name\": \"organizations_controller_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Create an Organization\",\n \"tags\": [\n \"organizations\"\n ]\n },\n \"organizations_controller_delete_organization\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Permanently deletes an organization in the current environment. It cannot be undone.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"organizations_controller_delete_organization\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier of the Organization.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/organizations/{id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"organizations_controller_delete_organization\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Delete an Organization\",\n \"tags\": [\n \"organizations\"\n ]\n },\n \"organizations_controller_find\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get the details of an existing organization.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"organizations_controller_find\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier of the Organization.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/organizations/{id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"organizations_controller_find\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get an Organization\",\n \"tags\": [\n \"organizations\"\n ]\n },\n \"organizations_controller_get_audit_log_configuration\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get the unified view of audit log trail and stream configuration for an organization.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"organizations_controller_get_audit_log_configuration\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier of the Organization.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/organizations/{id}/audit_log_configuration\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"organizations_controller_get_audit_log_configuration\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get Audit Log Configuration\",\n \"tags\": [\n \"organizations\"\n ]\n },\n \"organizations_controller_get_by_external_id\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get the details of an existing organization by an [external identifier](/authkit/metadata/external-identifiers).\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"organizations_controller_get_by_external_id\",\n \"parameters\": [\n {\n \"description\": \"The external ID of the Organization.\",\n \"in\": \"path\",\n \"name\": \"external_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"2fe01467-f7ea-4dd2-8b79-c2b4f56d0191\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/organizations/external_id/{external_id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"organizations_controller_get_by_external_id\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get an Organization by External ID\",\n \"tags\": [\n \"organizations\"\n ]\n },\n \"organizations_controller_list\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get a list of all of your existing organizations matching the criteria specified.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"organizations_controller_list\",\n \"parameters\": [\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ987654321KJIHGFEDCBA\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"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).\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n },\n {\n \"description\": \"The domains of an Organization. Any Organization with a matching domain will be returned.\",\n \"in\": \"query\",\n \"name\": \"domains\",\n \"required\": false,\n \"schema\": {\n \"example\": [\n \"foo-corp.com\"\n ],\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n }\n },\n {\n \"description\": \"Searchable text for an Organization. Matches against the organization name.\",\n \"in\": \"query\",\n \"name\": \"search\",\n \"required\": false,\n \"schema\": {\n \"example\": \"Acme Corp\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/organizations\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"organizations_controller_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List Organizations\",\n \"tags\": [\n \"organizations\"\n ]\n },\n \"organizations_controller_update_organization\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Updates an organization in the current environment.\",\n \"destructive\": true,\n \"method\": \"PUT\",\n \"operation_id\": \"organizations_controller_update_organization\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier of the Organization.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/organizations/{id}\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UpdateOrganizationDto\"\n },\n \"security\": null,\n \"skill_name\": \"organizations_controller_update_organization\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Update an Organization\",\n \"tags\": [\n \"organizations\"\n ]\n },\n \"portal_sessions_controller_create\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Generate a Portal Link scoped to an Organization.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"portal_sessions_controller_create\",\n \"parameters\": [],\n \"path\": \"/portal/generate_link\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/GenerateLinkDto\"\n },\n \"security\": null,\n \"skill_name\": \"portal_sessions_controller_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Generate a Portal Link\",\n \"tags\": [\n \"admin-portal\"\n ]\n },\n \"provider_controller_configure\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Creates or updates an organization's provider configuration. Use this endpoint to enable or disable a provider, set custom OAuth scopes, or supply organization-managed OAuth credentials.\",\n \"destructive\": true,\n \"method\": \"PUT\",\n \"operation_id\": \"provider_controller_configure\",\n \"parameters\": [\n {\n \"description\": \"An [Organization](/reference/organization) identifier to configure the provider for.\",\n \"in\": \"path\",\n \"name\": \"organizationId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The slug identifier of the provider to configure (e.g., `github`, `slack`, `notion`).\",\n \"in\": \"path\",\n \"name\": \"slug\",\n \"required\": true,\n \"schema\": {\n \"example\": \"github\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/organizations/{organizationId}/data_integration_configurations/{slug}\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ConfigureDataIntegrationBody\"\n },\n \"security\": null,\n \"skill_name\": \"provider_controller_configure\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Configure a provider for an organization\",\n \"tags\": [\n \"pipes.provider\"\n ]\n },\n \"provider_controller_list_for_organization\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Returns a list of all providers available to the specified organization, along with any configured custom OAuth scopes, enabled state, and organization-managed credentials where applicable.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"provider_controller_list_for_organization\",\n \"parameters\": [\n {\n \"description\": \"An [Organization](/reference/organization) identifier to list provider configurations for.\",\n \"in\": \"path\",\n \"name\": \"organizationId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/organizations/{organizationId}/data_integration_configurations\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"provider_controller_list_for_organization\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List providers for an organization\",\n \"tags\": [\n \"pipes.provider\"\n ]\n },\n \"radar_standalone_controller_assess\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Assess a request for risk using the Radar engine and receive a verdict.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"radar_standalone_controller_assess\",\n \"parameters\": [],\n \"path\": \"/radar/attempts\",\n \"request_body\": {\n \"properties\": {\n \"action\": {\n \"description\": \"The action being performed.\",\n \"enum\": [\n \"sign-up\",\n \"sign-in\"\n ],\n \"example\": \"sign-in\",\n \"type\": \"string\"\n },\n \"auth_method\": {\n \"description\": \"The authentication method being used.\",\n \"enum\": [\n \"Password\",\n \"Passkey\",\n \"Authenticator\",\n \"SMS_OTP\",\n \"Email_OTP\",\n \"Social\",\n \"SSO\",\n \"Other\"\n ],\n \"example\": \"Password\",\n \"type\": \"string\"\n },\n \"email\": {\n \"description\": \"The email address of the user making the request.\",\n \"example\": \"user@example.com\",\n \"format\": \"email\",\n \"type\": \"string\"\n },\n \"ip_address\": {\n \"description\": \"The IP address of the request to assess.\",\n \"example\": \"49.78.240.97\",\n \"type\": \"string\"\n },\n \"user_agent\": {\n \"description\": \"The user agent string of the request to assess.\",\n \"example\": \"Mozilla/5.0\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"ip_address\",\n \"user_agent\",\n \"email\",\n \"auth_method\",\n \"action\"\n ],\n \"type\": \"object\"\n },\n \"security\": null,\n \"skill_name\": \"radar_standalone_controller_assess\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Create an attempt\",\n \"tags\": [\n \"radar\"\n ]\n },\n \"radar_standalone_controller_delete_radar_list_entry\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Remove an entry from a Radar list.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"radar_standalone_controller_delete_radar_list_entry\",\n \"parameters\": [\n {\n \"description\": \"The type of the Radar list (e.g. ip_address, domain, email).\",\n \"in\": \"path\",\n \"name\": \"type\",\n \"required\": true,\n \"schema\": {\n \"enum\": [\n \"ip_address\",\n \"domain\",\n \"email\",\n \"device\",\n \"user_agent\",\n \"device_fingerprint\",\n \"country\"\n ],\n \"example\": \"ip_address\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The list action indicating whether to remove the entry from the allow or block list.\",\n \"in\": \"path\",\n \"name\": \"action\",\n \"required\": true,\n \"schema\": {\n \"enum\": [\n \"block\",\n \"allow\"\n ],\n \"example\": \"block\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/radar/lists/{type}/{action}\",\n \"request_body\": {\n \"properties\": {\n \"entry\": {\n \"description\": \"The value to remove from the list. Must match an existing entry.\",\n \"example\": \"198.51.100.42\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"entry\"\n ],\n \"type\": \"object\"\n },\n \"security\": null,\n \"skill_name\": \"radar_standalone_controller_delete_radar_list_entry\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Remove an entry from a Radar list\",\n \"tags\": [\n \"radar\"\n ]\n },\n \"radar_standalone_controller_update_radar_attempt\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"You may optionally inform Radar that an authentication attempt or challenge was successful using this endpoint. Some Radar controls depend on tracking recent successful attempts, such as impossible travel.\",\n \"destructive\": true,\n \"method\": \"PUT\",\n \"operation_id\": \"radar_standalone_controller_update_radar_attempt\",\n \"parameters\": [\n {\n \"description\": \"The unique identifier of the Radar attempt to update.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"radar_att_01HZBC6N1EB1ZY7KG32X\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/radar/attempts/{id}\",\n \"request_body\": {\n \"properties\": {\n \"attempt_status\": {\n \"const\": \"success\",\n \"description\": \"Set to `\\\"success\\\"` to mark the authentication attempt as successful.\",\n \"example\": \"success\",\n \"type\": \"string\"\n },\n \"challenge_status\": {\n \"const\": \"success\",\n \"description\": \"Set to `\\\"success\\\"` to mark the challenge as completed.\",\n \"example\": \"success\",\n \"type\": \"string\"\n }\n },\n \"type\": \"object\"\n },\n \"security\": null,\n \"skill_name\": \"radar_standalone_controller_update_radar_attempt\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Update a Radar attempt\",\n \"tags\": [\n \"radar\"\n ]\n },\n \"radar_standalone_controller_update_radar_list\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Add an entry to a Radar list.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"radar_standalone_controller_update_radar_list\",\n \"parameters\": [\n {\n \"description\": \"The type of the Radar list (e.g. ip_address, domain, email).\",\n \"in\": \"path\",\n \"name\": \"type\",\n \"required\": true,\n \"schema\": {\n \"enum\": [\n \"ip_address\",\n \"domain\",\n \"email\",\n \"device\",\n \"user_agent\",\n \"device_fingerprint\",\n \"country\"\n ],\n \"example\": \"ip_address\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The list action indicating whether to add the entry to the allow or block list.\",\n \"in\": \"path\",\n \"name\": \"action\",\n \"required\": true,\n \"schema\": {\n \"enum\": [\n \"block\",\n \"allow\"\n ],\n \"example\": \"block\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/radar/lists/{type}/{action}\",\n \"request_body\": {\n \"properties\": {\n \"entry\": {\n \"description\": \"The value to add to the list. Must match the format of the list type (e.g. a valid IP address for `ip_address`, a valid email for `email`).\",\n \"example\": \"198.51.100.42\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"entry\"\n ],\n \"type\": \"object\"\n },\n \"security\": null,\n \"skill_name\": \"radar_standalone_controller_update_radar_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Add an entry to a Radar list\",\n \"tags\": [\n \"radar\"\n ]\n },\n \"redirect_uris_controller_create\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Creates a new redirect URI for an application.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"redirect_uris_controller_create\",\n \"parameters\": [],\n \"path\": \"/user_management/redirect_uris\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreateRedirectUriDto\"\n },\n \"security\": null,\n \"skill_name\": \"redirect_uris_controller_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Create a redirect URI\",\n \"tags\": [\n \"user-management.redirect-uris\"\n ]\n },\n \"sso_controller_authorize\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Initiates the single sign-on flow.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"sso_controller_authorize\",\n \"parameters\": [\n {\n \"description\": \"Additional scopes to request from the identity provider. Applicable when using OAuth or OpenID Connect connections.\",\n \"in\": \"query\",\n \"name\": \"provider_scopes\",\n \"required\": false,\n \"schema\": {\n \"example\": [\n \"openid\",\n \"profile\",\n \"email\"\n ],\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n }\n },\n {\n \"description\": \"Key/value pairs of query parameters to pass to the OAuth provider. Only applicable when using OAuth connections.\",\n \"in\": \"query\",\n \"name\": \"provider_query_params\",\n \"required\": false,\n \"schema\": {\n \"additionalProperties\": {\n \"type\": \"string\"\n },\n \"example\": {\n \"access_type\": \"offline\",\n \"hd\": \"example.com\"\n },\n \"type\": \"object\"\n }\n },\n {\n \"description\": \"The unique identifier of the WorkOS environment client.\",\n \"in\": \"query\",\n \"name\": \"client_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"client_01HZBC6N1EB1ZY7KG32X\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Deprecated. Use `connection` or `organization` instead. Used to initiate SSO for a connection by domain. The domain must be associated with a connection in your WorkOS environment.\",\n \"in\": \"query\",\n \"name\": \"domain\",\n \"required\": false,\n \"schema\": {\n \"example\": \"example.com\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Used to initiate OAuth authentication with various providers.\",\n \"in\": \"query\",\n \"name\": \"provider\",\n \"required\": false,\n \"schema\": {\n \"enum\": [\n \"AppleOAuth\",\n \"BitbucketOAuth\",\n \"GitHubOAuth\",\n \"GitLabOAuth\",\n \"GoogleOAuth\",\n \"IntuitOAuth\",\n \"LinkedInOAuth\",\n \"MicrosoftOAuth\",\n \"SalesforceOAuth\",\n \"SlackOAuth\",\n \"VercelMarketplaceOAuth\",\n \"VercelOAuth\",\n \"XeroOAuth\"\n ],\n \"example\": \"GoogleOAuth\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"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.\",\n \"in\": \"query\",\n \"name\": \"redirect_uri\",\n \"required\": true,\n \"schema\": {\n \"example\": \"https://example.com/callback\",\n \"format\": \"uri\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The only valid option for the response type parameter is `\\\"code\\\"`.\\n\\nThe `\\\"code\\\"` parameter value initiates an [authorization code grant type](https://tools.ietf.org/html/rfc6749#section-4.1). This grant type allows you to exchange an authorization code for an access token during the redirect that takes place after a user has authenticated with an identity provider.\",\n \"in\": \"query\",\n \"name\": \"response_type\",\n \"required\": true,\n \"schema\": {\n \"const\": \"code\",\n \"example\": \"code\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"An optional parameter that can be used to encode arbitrary information to help restore application state between redirects. If included, the redirect URI received from WorkOS will contain the exact `state` that was passed.\",\n \"in\": \"query\",\n \"name\": \"state\",\n \"required\": false,\n \"schema\": {\n \"example\": \"dj1kUXc0dzlXZ1hjUQ==\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Used to initiate SSO for a connection. The value should be a WorkOS connection ID.\\n\\nYou can persist the WorkOS connection ID with application user or team identifiers. WorkOS will use the connection indicated by the connection parameter to direct the user to the corresponding IdP for authentication.\",\n \"in\": \"query\",\n \"name\": \"connection\",\n \"required\": false,\n \"schema\": {\n \"example\": \"conn_01E4ZCR3C56J083X43JQXF3JK5\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Used to initiate SSO for an organization. The value should be a WorkOS organization ID.\\n\\nYou can persist the WorkOS organization ID with application user or team identifiers. WorkOS will use the organization ID to determine the appropriate connection and the IdP to direct the user to for authentication.\",\n \"in\": \"query\",\n \"name\": \"organization\",\n \"required\": false,\n \"schema\": {\n \"example\": \"org_01EHQMYV6MBK39QC5PZXHY59C3\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Can be used to pre-fill the domain field when initiating authentication with Microsoft OAuth or with a Google SAML connection type.\",\n \"in\": \"query\",\n \"name\": \"domain_hint\",\n \"required\": false,\n \"schema\": {\n \"example\": \"example.com\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Can be used to pre-fill the username/email address field of the IdP sign-in page for the user, if you know their username ahead of time. Currently supported for OAuth, OpenID Connect, Okta, Entra ID, and custom SAML connections.\",\n \"in\": \"query\",\n \"name\": \"login_hint\",\n \"required\": false,\n \"schema\": {\n \"example\": \"user@example.com\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"A random string generated by the client that is used to mitigate replay attacks.\",\n \"in\": \"query\",\n \"name\": \"nonce\",\n \"required\": false,\n \"schema\": {\n \"example\": \"abc123def456\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/sso/authorize\",\n \"request_body\": null,\n \"security\": [],\n \"skill_name\": \"sso_controller_authorize\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Initiate SSO\",\n \"tags\": [\n \"sso\"\n ]\n },\n \"sso_controller_get_profile\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Exchange an access token for a user's [Profile](/reference/sso/profile). Because this profile is returned in the [Get a Profile and Token endpoint](/reference/sso/profile/get-profile-and-token) your application usually does not need to call this endpoint. It is available for any authentication flows that require an additional endpoint to retrieve a user's profile.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"sso_controller_get_profile\",\n \"parameters\": [],\n \"path\": \"/sso/profile\",\n \"request_body\": null,\n \"security\": [\n {\n \"access_token\": []\n }\n ],\n \"skill_name\": \"sso_controller_get_profile\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get a User Profile\",\n \"tags\": [\n \"sso\"\n ]\n },\n \"sso_controller_json_web_key_set\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Returns the JSON Web Key Set (JWKS) containing the public keys used for verifying access tokens.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"sso_controller_json_web_key_set\",\n \"parameters\": [\n {\n \"description\": \"Identifies the application making the request to the WorkOS server. You can obtain your client ID from the [API Keys](https://dashboard.workos.com/api-keys) page in the dashboard.\",\n \"in\": \"path\",\n \"name\": \"clientId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"client_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/sso/jwks/{clientId}\",\n \"request_body\": null,\n \"security\": [],\n \"skill_name\": \"sso_controller_json_web_key_set\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get JWKS\",\n \"tags\": [\n \"user-management.session-tokens\"\n ]\n },\n \"sso_controller_logout\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Logout allows to sign out a user from your application by triggering the identity provider sign out flow. This `GET` endpoint should be a redirection, since the identity provider user will be identified in the browser session.\\n\\nBefore redirecting to this endpoint, you need to generate a short-lived logout token using the [Logout Authorize](/reference/sso/logout/authorize) endpoint.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"sso_controller_logout\",\n \"parameters\": [\n {\n \"description\": \"The logout token returned from the [Logout Authorize](/reference/sso/logout/authorize) endpoint.\",\n \"in\": \"query\",\n \"name\": \"token\",\n \"required\": true,\n \"schema\": {\n \"example\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwcm9maWxlX2lkIjoicHJvZl8wMUdXUTFHMEgyRk02QVNFRjBIUzEzSENXOS0zMDRrZzAzZyIsImV4cCI6IjE1MTYyMzkwMjIifQ.Wru9Qlnf5DpohtGCKhZU4cVOd3zpiu7QQ-XEX--5A_4\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/sso/logout\",\n \"request_body\": null,\n \"security\": [],\n \"skill_name\": \"sso_controller_logout\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Logout Redirect\",\n \"tags\": [\n \"sso\"\n ]\n },\n \"sso_controller_logout_authorize\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"You should call this endpoint from your server to generate a logout token which is required for the [Logout Redirect](/reference/sso/logout) endpoint.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sso_controller_logout_authorize\",\n \"parameters\": [],\n \"path\": \"/sso/logout/authorize\",\n \"request_body\": {\n \"properties\": {\n \"profile_id\": {\n \"description\": \"The unique ID of the profile to log out.\",\n \"example\": \"prof_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"profile_id\"\n ],\n \"type\": \"object\"\n },\n \"security\": null,\n \"skill_name\": \"sso_controller_logout_authorize\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Logout Authorize\",\n \"tags\": [\n \"sso\"\n ]\n },\n \"sso_controller_token\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get an access token along with the user [Profile](/reference/sso/profile) using the code passed to your [Redirect URI](/reference/sso/get-authorization-url/redirect-uri).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sso_controller_token\",\n \"parameters\": [\n {\n \"description\": \"The client ID of the WorkOS environment.\",\n \"in\": \"query\",\n \"name\": \"client_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"client_01HZBC6N1EB1ZY7KG32X\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The client secret of the WorkOS environment.\",\n \"in\": \"query\",\n \"name\": \"client_secret\",\n \"required\": true,\n \"schema\": {\n \"example\": \"sk_example_123456789\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The authorization code received from the authorization callback.\",\n \"in\": \"query\",\n \"name\": \"code\",\n \"required\": true,\n \"schema\": {\n \"example\": \"authorization_code_value\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The grant type for the token request.\",\n \"in\": \"query\",\n \"name\": \"grant_type\",\n \"required\": true,\n \"schema\": {\n \"const\": \"authorization_code\",\n \"example\": \"authorization_code\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/sso/token\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TokenQueryDto\"\n },\n \"security\": [],\n \"skill_name\": \"sso_controller_token\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get a Profile and Token\",\n \"tags\": [\n \"sso\"\n ]\n },\n \"user_api_keys_controller_create\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Create a new API key owned by a user. The user must have an active membership in the specified organization.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"user_api_keys_controller_create\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier of the user.\",\n \"in\": \"path\",\n \"name\": \"userId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"user_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/users/{userId}/api_keys\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreateUserApiKeyDto\"\n },\n \"security\": null,\n \"skill_name\": \"user_api_keys_controller_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Create an API key for a user\",\n \"tags\": [\n \"api_keys\"\n ]\n },\n \"user_api_keys_controller_list\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get a list of API keys owned by a specific user.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"user_api_keys_controller_list\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier of the user.\",\n \"in\": \"path\",\n \"name\": \"userId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"user_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n },\n {\n \"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.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"obj_1234567890\",\n \"type\": \"string\"\n }\n },\n {\n \"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.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"obj_1234567890\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Order the results by the creation time.\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n },\n {\n \"description\": \"The ID of the organization to filter user API keys by. When provided, only API keys created against that organization membership are returned.\",\n \"in\": \"query\",\n \"name\": \"organization_id\",\n \"required\": false,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/users/{userId}/api_keys\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"user_api_keys_controller_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List API keys for a user\",\n \"tags\": [\n \"api_keys\"\n ]\n },\n \"userland_magic_auth_controller_get\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get the details of an existing [Magic Auth](/reference/authkit/magic-auth) code that can be used to send an email to a user for authentication.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"userland_magic_auth_controller_get\",\n \"parameters\": [\n {\n \"description\": \"The unique ID of the Magic Auth code.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"magic_auth_01HWZBQZY2M3AMQW166Q22K88F\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/magic_auth/{id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"userland_magic_auth_controller_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get Magic Auth code details\",\n \"tags\": [\n \"user-management.magic-auth\"\n ]\n },\n \"userland_magic_auth_controller_send_magic_auth_code_and_return\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Creates a one-time authentication code that can be sent to the user's email address. The code expires in 10 minutes. To verify the code, [authenticate the user with Magic Auth](/reference/authkit/authentication/magic-auth).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"userland_magic_auth_controller_send_magic_auth_code_and_return\",\n \"parameters\": [],\n \"path\": \"/user_management/magic_auth\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreateUserlandMagicCodeAndReturnDto\"\n },\n \"security\": null,\n \"skill_name\": \"userland_magic_auth_controller_send_magic_auth_code_and_return\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Create a Magic Auth code\",\n \"tags\": [\n \"user-management.magic-auth\"\n ]\n },\n \"userland_sessions_controller_authenticate_0\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Authenticate a user with a specified [authentication method](/reference/authkit/authentication).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"userland_sessions_controller_authenticate_0\",\n \"parameters\": [],\n \"path\": \"/user_management/authenticate\",\n \"request_body\": {\n \"oneOf\": [\n {\n \"properties\": {\n \"client_id\": {\n \"description\": \"The client ID of the application.\",\n \"example\": \"client_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n },\n \"client_secret\": {\n \"description\": \"The client secret of the application. May be omitted by public clients that authenticate through other means, such as a PKCE `code_verifier`.\",\n \"example\": \"sk_test_....\",\n \"type\": \"string\"\n },\n \"code\": {\n \"description\": \"The authorization code received from the redirect.\",\n \"example\": \"vBqZKaPpsnJlPfXiDqN7b6VTz\",\n \"type\": \"string\"\n },\n \"code_verifier\": {\n \"description\": \"The PKCE code verifier used to derive the code challenge passed to the authorization URL.\",\n \"example\": \"dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk\",\n \"type\": \"string\"\n },\n \"device_id\": {\n \"description\": \"A unique identifier for the device.\",\n \"example\": \"device_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n },\n \"grant_type\": {\n \"const\": \"authorization_code\",\n \"type\": \"string\"\n },\n \"invitation_token\": {\n \"description\": \"An invitation token to accept during authentication.\",\n \"example\": \"inv_tok_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n },\n \"ip_address\": {\n \"description\": \"The IP address of the user's request.\",\n \"example\": \"203.0.113.42\",\n \"type\": \"string\"\n },\n \"user_agent\": {\n \"description\": \"The user agent string from the user's browser.\",\n \"example\": \"Mozilla/5.0\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"client_id\",\n \"grant_type\",\n \"code\"\n ],\n \"type\": \"object\"\n },\n {\n \"properties\": {\n \"client_id\": {\n \"description\": \"The client ID of the application.\",\n \"example\": \"client_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n },\n \"client_secret\": {\n \"description\": \"The client secret of the application.\",\n \"example\": \"sk_test_....\",\n \"type\": \"string\"\n },\n \"device_id\": {\n \"description\": \"A unique identifier for the device.\",\n \"example\": \"device_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n },\n \"email\": {\n \"description\": \"The user's email address.\",\n \"example\": \"user@example.com\",\n \"type\": \"string\"\n },\n \"grant_type\": {\n \"const\": \"password\",\n \"type\": \"string\"\n },\n \"invitation_token\": {\n \"description\": \"An invitation token to accept during authentication.\",\n \"example\": \"inv_tok_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n },\n \"ip_address\": {\n \"description\": \"The IP address of the user's request.\",\n \"example\": \"203.0.113.42\",\n \"type\": \"string\"\n },\n \"password\": {\n \"description\": \"The user's password.\",\n \"example\": \"strong_password_123!\",\n \"type\": \"string\"\n },\n \"user_agent\": {\n \"description\": \"The user agent string from the user's browser.\",\n \"example\": \"Mozilla/5.0\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"client_id\",\n \"client_secret\",\n \"grant_type\",\n \"email\",\n \"password\"\n ],\n \"type\": \"object\"\n },\n {\n \"properties\": {\n \"client_id\": {\n \"description\": \"The client ID of the application.\",\n \"example\": \"client_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n },\n \"client_secret\": {\n \"description\": \"The client secret of the application. May be omitted by public clients that authenticate through other means, such as a PKCE `code_verifier`.\",\n \"example\": \"sk_test_....\",\n \"type\": \"string\"\n },\n \"device_id\": {\n \"description\": \"A unique identifier for the device.\",\n \"example\": \"device_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n },\n \"grant_type\": {\n \"const\": \"refresh_token\",\n \"type\": \"string\"\n },\n \"ip_address\": {\n \"description\": \"The IP address of the user's request.\",\n \"example\": \"203.0.113.42\",\n \"type\": \"string\"\n },\n \"organization_id\": {\n \"description\": \"The ID of the organization to scope the session to.\",\n \"example\": \"org_01EHQMYV6MBK39QC5PZXHY59C3\",\n \"type\": \"string\"\n },\n \"refresh_token\": {\n \"description\": \"The refresh token to exchange for new tokens.\",\n \"example\": \"yAjhKk23hJMM3DaR...\",\n \"type\": \"string\"\n },\n \"user_agent\": {\n \"description\": \"The user agent string from the user's browser.\",\n \"example\": \"Mozilla/5.0\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"client_id\",\n \"grant_type\",\n \"refresh_token\"\n ],\n \"type\": \"object\"\n },\n {\n \"properties\": {\n \"client_id\": {\n \"description\": \"The client ID of the application.\",\n \"example\": \"client_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n },\n \"client_secret\": {\n \"description\": \"The client secret of the application.\",\n \"example\": \"sk_test_....\",\n \"type\": \"string\"\n },\n \"code\": {\n \"description\": \"The one-time code for Magic Auth authentication.\",\n \"example\": \"123456\",\n \"type\": \"string\"\n },\n \"device_id\": {\n \"description\": \"A unique identifier for the device.\",\n \"example\": \"device_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n },\n \"email\": {\n \"description\": \"The user's email address.\",\n \"example\": \"user@example.com\",\n \"type\": \"string\"\n },\n \"grant_type\": {\n \"const\": \"urn:workos:oauth:grant-type:magic-auth:code\",\n \"type\": \"string\"\n },\n \"invitation_token\": {\n \"description\": \"An invitation token to accept during authentication.\",\n \"example\": \"inv_tok_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n },\n \"ip_address\": {\n \"description\": \"The IP address of the user's request.\",\n \"example\": \"203.0.113.42\",\n \"type\": \"string\"\n },\n \"user_agent\": {\n \"description\": \"The user agent string from the user's browser.\",\n \"example\": \"Mozilla/5.0\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"client_id\",\n \"client_secret\",\n \"grant_type\",\n \"code\",\n \"email\"\n ],\n \"type\": \"object\"\n },\n {\n \"properties\": {\n \"client_id\": {\n \"description\": \"The client ID of the application.\",\n \"example\": \"client_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n },\n \"client_secret\": {\n \"description\": \"The client secret of the application.\",\n \"example\": \"sk_test_....\",\n \"type\": \"string\"\n },\n \"code\": {\n \"description\": \"The email verification code.\",\n \"example\": \"123456\",\n \"type\": \"string\"\n },\n \"device_id\": {\n \"description\": \"A unique identifier for the device.\",\n \"example\": \"device_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n },\n \"grant_type\": {\n \"const\": \"urn:workos:oauth:grant-type:email-verification:code\",\n \"type\": \"string\"\n },\n \"ip_address\": {\n \"description\": \"The IP address of the user's request.\",\n \"example\": \"203.0.113.42\",\n \"type\": \"string\"\n },\n \"pending_authentication_token\": {\n \"description\": \"The pending authentication token from a previous authentication attempt.\",\n \"example\": \"cTDQJTTkTkkVYxbn...\",\n \"type\": \"string\"\n },\n \"user_agent\": {\n \"description\": \"The user agent string from the user's browser.\",\n \"example\": \"Mozilla/5.0\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"client_id\",\n \"client_secret\",\n \"grant_type\",\n \"code\",\n \"pending_authentication_token\"\n ],\n \"type\": \"object\"\n },\n {\n \"properties\": {\n \"authentication_challenge_id\": {\n \"description\": \"The ID of the MFA authentication challenge.\",\n \"example\": \"auth_challenge_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n },\n \"client_id\": {\n \"description\": \"The client ID of the application.\",\n \"example\": \"client_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n },\n \"client_secret\": {\n \"description\": \"The client secret of the application.\",\n \"example\": \"sk_test_....\",\n \"type\": \"string\"\n },\n \"code\": {\n \"description\": \"The TOTP code from the authenticator app.\",\n \"example\": \"123456\",\n \"type\": \"string\"\n },\n \"device_id\": {\n \"description\": \"A unique identifier for the device.\",\n \"example\": \"device_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n },\n \"grant_type\": {\n \"const\": \"urn:workos:oauth:grant-type:mfa-totp\",\n \"type\": \"string\"\n },\n \"ip_address\": {\n \"description\": \"The IP address of the user's request.\",\n \"example\": \"203.0.113.42\",\n \"type\": \"string\"\n },\n \"pending_authentication_token\": {\n \"description\": \"The pending authentication token from a previous authentication attempt.\",\n \"example\": \"cTDQJTTkTkkVYxbn...\",\n \"type\": \"string\"\n },\n \"user_agent\": {\n \"description\": \"The user agent string from the user's browser.\",\n \"example\": \"Mozilla/5.0\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"client_id\",\n \"client_secret\",\n \"grant_type\",\n \"code\",\n \"pending_authentication_token\",\n \"authentication_challenge_id\"\n ],\n \"type\": \"object\"\n },\n {\n \"properties\": {\n \"client_id\": {\n \"description\": \"The client ID of the application.\",\n \"example\": \"client_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n },\n \"client_secret\": {\n \"description\": \"The client secret of the application.\",\n \"example\": \"sk_test_....\",\n \"type\": \"string\"\n },\n \"device_id\": {\n \"description\": \"A unique identifier for the device.\",\n \"example\": \"device_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n },\n \"grant_type\": {\n \"const\": \"urn:workos:oauth:grant-type:organization-selection\",\n \"type\": \"string\"\n },\n \"ip_address\": {\n \"description\": \"The IP address of the user's request.\",\n \"example\": \"203.0.113.42\",\n \"type\": \"string\"\n },\n \"organization_id\": {\n \"description\": \"The ID of the organization the user selected.\",\n \"example\": \"org_01EHQMYV6MBK39QC5PZXHY59C3\",\n \"type\": \"string\"\n },\n \"pending_authentication_token\": {\n \"description\": \"The pending authentication token from a previous authentication attempt.\",\n \"example\": \"cTDQJTTkTkkVYxbn...\",\n \"type\": \"string\"\n },\n \"user_agent\": {\n \"description\": \"The user agent string from the user's browser.\",\n \"example\": \"Mozilla/5.0\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"client_id\",\n \"client_secret\",\n \"grant_type\",\n \"pending_authentication_token\",\n \"organization_id\"\n ],\n \"type\": \"object\"\n },\n {\n \"properties\": {\n \"client_id\": {\n \"description\": \"The client ID of the application.\",\n \"example\": \"client_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n },\n \"device_code\": {\n \"description\": \"The device verification code.\",\n \"example\": \"Ao4fMrDS...\",\n \"type\": \"string\"\n },\n \"device_id\": {\n \"description\": \"A unique identifier for the device.\",\n \"example\": \"device_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n },\n \"grant_type\": {\n \"const\": \"urn:ietf:params:oauth:grant-type:device_code\",\n \"type\": \"string\"\n },\n \"ip_address\": {\n \"description\": \"The IP address of the user's request.\",\n \"example\": \"203.0.113.42\",\n \"type\": \"string\"\n },\n \"user_agent\": {\n \"description\": \"The user agent string from the user's browser.\",\n \"example\": \"Mozilla/5.0\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"client_id\",\n \"grant_type\",\n \"device_code\"\n ],\n \"type\": \"object\"\n }\n ]\n },\n \"security\": null,\n \"skill_name\": \"userland_sessions_controller_authenticate_0\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Authenticate\",\n \"tags\": [\n \"user-management.authentication\"\n ]\n },\n \"userland_sessions_controller_logout\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Logout a user from the current [session](/reference/authkit/session).\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"userland_sessions_controller_logout\",\n \"parameters\": [\n {\n \"description\": \"The ID of the session. This can be extracted from the `sid` claim of the access token.\",\n \"in\": \"query\",\n \"name\": \"session_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"session_01H93ZY4F80QPBEZ1R5B2SHQG8\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The URL to redirect the user to after logout.\",\n \"in\": \"query\",\n \"name\": \"return_to\",\n \"required\": false,\n \"schema\": {\n \"example\": \"https://example.com\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/sessions/logout\",\n \"request_body\": null,\n \"security\": [],\n \"skill_name\": \"userland_sessions_controller_logout\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Logout\",\n \"tags\": [\n \"user-management.authentication\"\n ]\n },\n \"userland_sessions_controller_revoke_session\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Revoke a [user session](/reference/authkit/session).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"userland_sessions_controller_revoke_session\",\n \"parameters\": [],\n \"path\": \"/user_management/sessions/revoke\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UserlandRevokeSessionDto\"\n },\n \"security\": null,\n \"skill_name\": \"userland_sessions_controller_revoke_session\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Revoke Session\",\n \"tags\": [\n \"user-management.authentication\"\n ]\n },\n \"userland_sso_controller_authorize\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Generates an OAuth 2.0 authorization URL to authenticate a user with AuthKit or SSO.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"userland_sso_controller_authorize\",\n \"parameters\": [\n {\n \"description\": \"The only valid PKCE code challenge method is `\\\"S256\\\"`. Required when specifying a `code_challenge`.\",\n \"in\": \"query\",\n \"name\": \"code_challenge_method\",\n \"required\": false,\n \"schema\": {\n \"const\": \"S256\",\n \"example\": \"S256\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Code challenge derived from the code verifier used for the PKCE flow.\",\n \"in\": \"query\",\n \"name\": \"code_challenge\",\n \"required\": false,\n \"schema\": {\n \"example\": \"E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"A domain hint for SSO connection lookup.\",\n \"in\": \"query\",\n \"name\": \"domain_hint\",\n \"required\": false,\n \"schema\": {\n \"example\": \"example.com\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The ID of an SSO connection to use for authentication.\",\n \"in\": \"query\",\n \"name\": \"connection_id\",\n \"required\": false,\n \"schema\": {\n \"example\": \"conn_01EHQMYV6MBK39QC5PZXHY59C3\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Key/value pairs of query parameters to pass to the OAuth provider.\",\n \"in\": \"query\",\n \"name\": \"provider_query_params\",\n \"required\": false,\n \"schema\": {\n \"additionalProperties\": {\n \"type\": \"string\"\n },\n \"example\": {\n \"access_type\": \"offline\",\n \"hd\": \"example.com\"\n },\n \"type\": \"object\"\n }\n },\n {\n \"description\": \"Additional OAuth scopes to request from the identity provider.\",\n \"in\": \"query\",\n \"name\": \"provider_scopes\",\n \"required\": false,\n \"schema\": {\n \"example\": [\n \"openid\",\n \"profile\",\n \"email\"\n ],\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n }\n },\n {\n \"description\": \"A token representing a user invitation to redeem during authentication.\",\n \"in\": \"query\",\n \"name\": \"invitation_token\",\n \"required\": false,\n \"schema\": {\n \"example\": \"inv_token_abc123\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Used to specify which screen to display when the provider is `authkit`.\",\n \"in\": \"query\",\n \"name\": \"screen_hint\",\n \"required\": false,\n \"schema\": {\n \"default\": \"sign-in\",\n \"enum\": [\n \"sign-up\",\n \"sign-in\"\n ],\n \"example\": \"sign-in\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"A hint to the authorization server about the login identifier the user might use.\",\n \"in\": \"query\",\n \"name\": \"login_hint\",\n \"required\": false,\n \"schema\": {\n \"example\": \"user@example.com\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The OAuth provider to authenticate with (e.g., GoogleOAuth, MicrosoftOAuth, GitHubOAuth).\",\n \"in\": \"query\",\n \"name\": \"provider\",\n \"required\": false,\n \"schema\": {\n \"enum\": [\n \"authkit\",\n \"AppleOAuth\",\n \"BitbucketOAuth\",\n \"GitHubOAuth\",\n \"GitLabOAuth\",\n \"GoogleOAuth\",\n \"IntuitOAuth\",\n \"LinkedInOAuth\",\n \"MicrosoftOAuth\",\n \"SalesforceOAuth\",\n \"SlackOAuth\",\n \"VercelMarketplaceOAuth\",\n \"VercelOAuth\",\n \"XeroOAuth\"\n ],\n \"example\": \"GoogleOAuth\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Controls the authentication flow behavior for the user.\",\n \"in\": \"query\",\n \"name\": \"prompt\",\n \"required\": false,\n \"schema\": {\n \"example\": \"login\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"An opaque value used to maintain state between the request and the callback.\",\n \"in\": \"query\",\n \"name\": \"state\",\n \"required\": false,\n \"schema\": {\n \"example\": \"eyJyZXR1cm5UbyI6ICIvZGFzaGJvYXJkIn0=\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The ID of the organization to authenticate the user against.\",\n \"in\": \"query\",\n \"name\": \"organization_id\",\n \"required\": false,\n \"schema\": {\n \"example\": \"org_01EHQMYV6MBK39QC5PZXHY59C3\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The response type of the application.\",\n \"in\": \"query\",\n \"name\": \"response_type\",\n \"required\": true,\n \"schema\": {\n \"const\": \"code\",\n \"example\": \"code\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The callback URI where the authorization code will be sent after authentication.\",\n \"in\": \"query\",\n \"name\": \"redirect_uri\",\n \"required\": true,\n \"schema\": {\n \"example\": \"https://example.com/callback\",\n \"format\": \"uri\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The unique identifier of the WorkOS environment client.\",\n \"in\": \"query\",\n \"name\": \"client_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"client_01HZBC6N1EB1ZY7KG32X\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/authorize\",\n \"request_body\": null,\n \"security\": [],\n \"skill_name\": \"userland_sso_controller_authorize\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get an authorization URL\",\n \"tags\": [\n \"user-management.authentication\"\n ]\n },\n \"userland_sso_controller_device_authorization\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Initiates the CLI Auth flow by requesting a device code and verification URLs. This endpoint implements the OAuth 2.0 Device Authorization Flow ([RFC 8628](https://datatracker.ietf.org/doc/html/rfc8628)) and is designed for command-line applications or other devices with limited input capabilities.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"userland_sso_controller_device_authorization\",\n \"parameters\": [],\n \"path\": \"/user_management/authorize/device\",\n \"request_body\": {\n \"properties\": {\n \"client_id\": {\n \"description\": \"The WorkOS client ID for your application.\",\n \"example\": \"client_01HZBC6N1EB1ZY7KG32X\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"client_id\"\n ],\n \"type\": \"object\"\n },\n \"security\": [],\n \"skill_name\": \"userland_sso_controller_device_authorization\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get device authorization URL\",\n \"tags\": [\n \"user-management.authentication\"\n ]\n },\n \"userland_user_authentication_factors_controller_create_0\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Enrolls a user in a new [authentication factor](/reference/authkit/mfa/authentication-factor).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"userland_user_authentication_factors_controller_create_0\",\n \"parameters\": [\n {\n \"description\": \"The ID of the [user](/reference/authkit/user).\",\n \"in\": \"path\",\n \"name\": \"userlandUserId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"user_01E4ZCR3C56J083X43JQXF3JK5\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/users/{userlandUserId}/auth_factors\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/EnrollUserlandUserAuthenticationFactorDto\"\n },\n \"security\": null,\n \"skill_name\": \"userland_user_authentication_factors_controller_create_0\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Enroll an authentication factor\",\n \"tags\": [\n \"user-management.multi-factor-authentication\"\n ]\n },\n \"userland_user_authentication_factors_controller_list_0\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Lists the [authentication factors](/reference/authkit/mfa/authentication-factor) for a user.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"userland_user_authentication_factors_controller_list_0\",\n \"parameters\": [\n {\n \"description\": \"The ID of the [user](/reference/authkit/user).\",\n \"in\": \"path\",\n \"name\": \"userlandUserId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"user_01E4ZCR3C56J083X43JQXF3JK5\",\n \"type\": \"string\"\n }\n },\n {\n \"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.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"obj_1234567890\",\n \"type\": \"string\"\n }\n },\n {\n \"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.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"obj_1234567890\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Order the results by the creation time.\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n }\n ],\n \"path\": \"/user_management/users/{userlandUserId}/auth_factors\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"userland_user_authentication_factors_controller_list_0\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List authentication factors\",\n \"tags\": [\n \"user-management.multi-factor-authentication\"\n ]\n },\n \"userland_user_feature_flags_controller_list\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get a list of all enabled feature flags for the provided user. This includes feature flags enabled specifically for the user as well as any organizations that the user is a member of.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"userland_user_feature_flags_controller_list\",\n \"parameters\": [\n {\n \"description\": \"The ID of the user.\",\n \"in\": \"path\",\n \"name\": \"userId\",\n \"required\": true,\n \"schema\": {\n \"example\": \"user_01E4ZCR3C56J083X43JQXF3JK5\",\n \"type\": \"string\"\n }\n },\n {\n \"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.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"obj_1234567890\",\n \"type\": \"string\"\n }\n },\n {\n \"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.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"obj_1234567890\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Order the results by the creation time.\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n }\n ],\n \"path\": \"/user_management/users/{userId}/feature-flags\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"userland_user_feature_flags_controller_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List enabled feature flags for a user\",\n \"tags\": [\n \"user-management.users.feature-flags\"\n ]\n },\n \"userland_user_identities_controller_get\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get a list of identities associated with the user. A user can have multiple associated identities after going through [identity linking](/authkit/identity-linking). Currently only OAuth identities are supported. More provider types may be added in the future.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"userland_user_identities_controller_get\",\n \"parameters\": [\n {\n \"description\": \"The unique ID of the user.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"user_01E4ZCR3C56J083X43JQXF3JK5\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/users/{id}/identities\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"userland_user_identities_controller_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get user identities\",\n \"tags\": [\n \"user-management.users\"\n ]\n },\n \"userland_user_invites_controller_accept\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Accepts an invitation and, if linked to an organization, activates the user's membership in that organization.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"userland_user_invites_controller_accept\",\n \"parameters\": [\n {\n \"description\": \"The unique ID of the invitation.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"invitation_01E4ZCR3C56J083X43JQXF3JK5\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/invitations/{id}/accept\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"userland_user_invites_controller_accept\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Accept an invitation\",\n \"tags\": [\n \"user-management.invitations\"\n ]\n },\n \"userland_user_invites_controller_create\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Sends an invitation email to the recipient.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"userland_user_invites_controller_create\",\n \"parameters\": [],\n \"path\": \"/user_management/invitations\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreateUserlandUserInviteOptionsDto\"\n },\n \"security\": null,\n \"skill_name\": \"userland_user_invites_controller_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Send an invitation\",\n \"tags\": [\n \"user-management.invitations\"\n ]\n },\n \"userland_user_invites_controller_get\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get the details of an existing invitation.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"userland_user_invites_controller_get\",\n \"parameters\": [\n {\n \"description\": \"The unique ID of the invitation.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"invitation_01E4ZCR3C56J083X43JQXF3JK5\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/invitations/{id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"userland_user_invites_controller_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get an invitation\",\n \"tags\": [\n \"user-management.invitations\"\n ]\n },\n \"userland_user_invites_controller_get_by_token\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Retrieve an existing invitation using the token.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"userland_user_invites_controller_get_by_token\",\n \"parameters\": [\n {\n \"description\": \"The token used to accept the invitation.\",\n \"in\": \"path\",\n \"name\": \"token\",\n \"required\": true,\n \"schema\": {\n \"example\": \"Z1uX3RbwcIl5fIGJJJCXXisdI\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/invitations/by_token/{token}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"userland_user_invites_controller_get_by_token\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Find an invitation by token\",\n \"tags\": [\n \"user-management.invitations\"\n ]\n },\n \"userland_user_invites_controller_list\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get a list of all of invitations matching the criteria specified.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"userland_user_invites_controller_list\",\n \"parameters\": [\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ987654321KJIHGFEDCBA\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"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).\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n },\n {\n \"description\": \"The ID of the [organization](/reference/organization) that the recipient will join.\",\n \"in\": \"query\",\n \"name\": \"organization_id\",\n \"required\": false,\n \"schema\": {\n \"example\": \"org_01E4ZCR3C56J083X43JQXF3JK5\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The email address of the recipient.\",\n \"in\": \"query\",\n \"name\": \"email\",\n \"required\": false,\n \"schema\": {\n \"example\": \"marcelina.davis@example.com\",\n \"format\": \"email\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/invitations\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"userland_user_invites_controller_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List invitations\",\n \"tags\": [\n \"user-management.invitations\"\n ]\n },\n \"userland_user_invites_controller_resend\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Resends an invitation email to the recipient. The invitation must be in a pending state.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"userland_user_invites_controller_resend\",\n \"parameters\": [\n {\n \"description\": \"The unique ID of the invitation.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"invitation_01E4ZCR3C56J083X43JQXF3JK5\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/invitations/{id}/resend\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ResendUserlandUserInviteOptionsDto\"\n },\n \"security\": null,\n \"skill_name\": \"userland_user_invites_controller_resend\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Resend an invitation\",\n \"tags\": [\n \"user-management.invitations\"\n ]\n },\n \"userland_user_invites_controller_revoke\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Revokes an existing invitation.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"userland_user_invites_controller_revoke\",\n \"parameters\": [\n {\n \"description\": \"The unique ID of the invitation.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"invitation_01E4ZCR3C56J083X43JQXF3JK5\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/invitations/{id}/revoke\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"userland_user_invites_controller_revoke\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Revoke an invitation\",\n \"tags\": [\n \"user-management.invitations\"\n ]\n },\n \"userland_user_organization_memberships_controller_create\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Creates a new `active` organization membership for the given organization and user.\\n\\nCalling this API with an organization and user that match an `inactive` organization membership will activate the membership with the specified role(s).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"userland_user_organization_memberships_controller_create\",\n \"parameters\": [],\n \"path\": \"/user_management/organization_memberships\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreateUserlandUserOrganizationMembershipDto\"\n },\n \"security\": null,\n \"skill_name\": \"userland_user_organization_memberships_controller_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Create an organization membership\",\n \"tags\": [\n \"user-management.organization-membership\"\n ]\n },\n \"userland_user_organization_memberships_controller_deactivate\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Deactivates an `active` organization membership. Emits an [organization_membership.updated](/events/organization-membership) event upon successful deactivation.\\n\\n- Deactivating an `inactive` membership is a no-op and does not emit an event.\\n- Deactivating a `pending` membership returns an error. This membership should be [deleted](/reference/authkit/organization-membership/delete) instead.\\n\\nSee the [membership management documentation](/authkit/users-organizations/organizations/membership-management) for additional details.\",\n \"destructive\": true,\n \"method\": \"PUT\",\n \"operation_id\": \"userland_user_organization_memberships_controller_deactivate\",\n \"parameters\": [\n {\n \"description\": \"The unique ID of the organization membership.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"om_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/organization_memberships/{id}/deactivate\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"userland_user_organization_memberships_controller_deactivate\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Deactivate an organization membership\",\n \"tags\": [\n \"user-management.organization-membership\"\n ]\n },\n \"userland_user_organization_memberships_controller_delete\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Permanently deletes an existing organization membership. It cannot be undone.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"userland_user_organization_memberships_controller_delete\",\n \"parameters\": [\n {\n \"description\": \"The unique ID of the organization membership.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"om_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/organization_memberships/{id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"userland_user_organization_memberships_controller_delete\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Delete an organization membership\",\n \"tags\": [\n \"user-management.organization-membership\"\n ]\n },\n \"userland_user_organization_memberships_controller_get\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get the details of an existing organization membership.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"userland_user_organization_memberships_controller_get\",\n \"parameters\": [\n {\n \"description\": \"The unique ID of the organization membership.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"om_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/organization_memberships/{id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"userland_user_organization_memberships_controller_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get an organization membership\",\n \"tags\": [\n \"user-management.organization-membership\"\n ]\n },\n \"userland_user_organization_memberships_controller_list\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get a list of all organization memberships matching the criteria specified. At least one of `user_id` or `organization_id` must be provided. By default only active memberships are returned. Use the `statuses` parameter to filter by other statuses.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"userland_user_organization_memberships_controller_list\",\n \"parameters\": [\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ987654321KJIHGFEDCBA\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"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).\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n },\n {\n \"description\": \"The ID of the [organization](/reference/organization) which the user belongs to.\",\n \"in\": \"query\",\n \"name\": \"organization_id\",\n \"required\": false,\n \"schema\": {\n \"example\": \"org_01E4ZCR3C56J083X43JQXF3JK5\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Filter by the status of the organization membership. Array including any of `active`, `inactive`, or `pending`.\",\n \"in\": \"query\",\n \"name\": \"statuses\",\n \"required\": false,\n \"schema\": {\n \"example\": [\n \"active\"\n ],\n \"items\": {\n \"enum\": [\n \"active\",\n \"inactive\",\n \"pending\"\n ],\n \"type\": \"string\"\n },\n \"type\": \"array\"\n }\n },\n {\n \"description\": \"The ID of the [user](/reference/authkit/user).\",\n \"in\": \"query\",\n \"name\": \"user_id\",\n \"required\": false,\n \"schema\": {\n \"example\": \"user_01E4ZCR3C5A4QZ2Z2JQXGKZJ9E\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/organization_memberships\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"userland_user_organization_memberships_controller_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List organization memberships\",\n \"tags\": [\n \"user-management.organization-membership\"\n ]\n },\n \"userland_user_organization_memberships_controller_reactivate\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Reactivates an `inactive` organization membership, retaining the pre-existing role(s). Emits an [organization_membership.updated](/events/organization-membership) event upon successful reactivation.\\n\\n- Reactivating an `active` membership is a no-op and does not emit an event.\\n- Reactivating a `pending` membership returns an error. The user needs to [accept the invitation](/authkit/invitations) instead.\\n\\nSee the [membership management documentation](/authkit/users-organizations/organizations/membership-management) for additional details.\",\n \"destructive\": true,\n \"method\": \"PUT\",\n \"operation_id\": \"userland_user_organization_memberships_controller_reactivate\",\n \"parameters\": [\n {\n \"description\": \"The unique ID of the organization membership.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"om_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/organization_memberships/{id}/reactivate\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"userland_user_organization_memberships_controller_reactivate\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Reactivate an organization membership\",\n \"tags\": [\n \"user-management.organization-membership\"\n ]\n },\n \"userland_user_organization_memberships_controller_update\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Update the details of an existing organization membership.\",\n \"destructive\": true,\n \"method\": \"PUT\",\n \"operation_id\": \"userland_user_organization_memberships_controller_update\",\n \"parameters\": [\n {\n \"description\": \"The unique ID of the organization membership.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"om_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/organization_memberships/{id}\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UpdateUserlandUserOrganizationMembershipDto\"\n },\n \"security\": null,\n \"skill_name\": \"userland_user_organization_memberships_controller_update\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Update an organization membership\",\n \"tags\": [\n \"user-management.organization-membership\"\n ]\n },\n \"userland_user_sessions_controller_list\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get a list of all active sessions for a specific user.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"userland_user_sessions_controller_list\",\n \"parameters\": [\n {\n \"description\": \"The ID of the user.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"user_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ987654321KJIHGFEDCBA\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"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).\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n }\n ],\n \"path\": \"/user_management/users/{id}/sessions\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"userland_user_sessions_controller_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List sessions\",\n \"tags\": [\n \"user-management.users\"\n ]\n },\n \"userland_users_controller_confirm_email_change\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Confirms an email change using the one-time code received by the user.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"userland_users_controller_confirm_email_change\",\n \"parameters\": [\n {\n \"description\": \"The unique ID of the user.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"user_01E4ZCR3C56J083X43JQXF3JK5\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/users/{id}/email_change/confirm\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ConfirmEmailChangeDto\"\n },\n \"security\": null,\n \"skill_name\": \"userland_users_controller_confirm_email_change\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Confirm email change\",\n \"tags\": [\n \"user-management.users\"\n ]\n },\n \"userland_users_controller_create_0\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Create a new user in the current environment.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"userland_users_controller_create_0\",\n \"parameters\": [],\n \"path\": \"/user_management/users\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreateUserlandUserDto\"\n },\n \"security\": null,\n \"skill_name\": \"userland_users_controller_create_0\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Create a user\",\n \"tags\": [\n \"user-management.users\"\n ]\n },\n \"userland_users_controller_create_password_reset_token\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Creates a one-time token that can be used to reset a user's password.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"userland_users_controller_create_password_reset_token\",\n \"parameters\": [],\n \"path\": \"/user_management/password_reset\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreatePasswordResetTokenDto\"\n },\n \"security\": null,\n \"skill_name\": \"userland_users_controller_create_password_reset_token\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Create a password reset token\",\n \"tags\": [\n \"user-management.users\"\n ]\n },\n \"userland_users_controller_delete_0\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Permanently deletes a user in the current environment. It cannot be undone.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"userland_users_controller_delete_0\",\n \"parameters\": [\n {\n \"description\": \"The unique ID of the user.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"user_01E4ZCR3C56J083X43JQXF3JK5\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/users/{id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"userland_users_controller_delete_0\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Delete a user\",\n \"tags\": [\n \"user-management.users\"\n ]\n },\n \"userland_users_controller_email_verification_0\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Verifies an email address using the one-time code received by the user.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"userland_users_controller_email_verification_0\",\n \"parameters\": [\n {\n \"description\": \"The ID of the user.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"user_01E4ZCR3C56J083X43JQXF3JK5\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/users/{id}/email_verification/confirm\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/VerifyEmailAddressDto\"\n },\n \"security\": null,\n \"skill_name\": \"userland_users_controller_email_verification_0\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Verify email\",\n \"tags\": [\n \"user-management.users\"\n ]\n },\n \"userland_users_controller_get_0\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get the details of an existing user.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"userland_users_controller_get_0\",\n \"parameters\": [\n {\n \"description\": \"The unique ID of the user.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"user_01E4ZCR3C56J083X43JQXF3JK5\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/users/{id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"userland_users_controller_get_0\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get a user\",\n \"tags\": [\n \"user-management.users\"\n ]\n },\n \"userland_users_controller_get_by_external_id\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get the details of an existing user by an [external identifier](/authkit/metadata/external-identifiers).\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"userland_users_controller_get_by_external_id\",\n \"parameters\": [\n {\n \"description\": \"The external ID of the user.\",\n \"in\": \"path\",\n \"name\": \"external_id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"f1ffa2b2-c20b-4d39-be5c-212726e11222\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/users/external_id/{external_id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"userland_users_controller_get_by_external_id\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get a user by external ID\",\n \"tags\": [\n \"user-management.users\"\n ]\n },\n \"userland_users_controller_get_email_verification\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get the details of an existing email verification code that can be used to send an email to a user for verification.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"userland_users_controller_get_email_verification\",\n \"parameters\": [\n {\n \"description\": \"The ID of the email verification code.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"email_verification_01E4ZCR3C56J083X43JQXF3JK5\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/email_verification/{id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"userland_users_controller_get_email_verification\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get an email verification code\",\n \"tags\": [\n \"user-management.users\"\n ]\n },\n \"userland_users_controller_get_password_reset\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get the details of an existing password reset token that can be used to reset a user's password.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"userland_users_controller_get_password_reset\",\n \"parameters\": [\n {\n \"description\": \"The ID of the password reset token.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"password_reset_01E4ZCR3C56J083X43JQXF3JK5\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/password_reset/{id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"userland_users_controller_get_password_reset\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Get a password reset token\",\n \"tags\": [\n \"user-management.users\"\n ]\n },\n \"userland_users_controller_list_0\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get a list of all of your existing users matching the criteria specified.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"userland_users_controller_list_0\",\n \"parameters\": [\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ987654321KJIHGFEDCBA\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"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).\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n },\n {\n \"description\": \"Filter users by the organization they are a member of. Deprecated in favor of `organization_id`.\",\n \"in\": \"query\",\n \"name\": \"organization\",\n \"required\": false,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Filter users by the organization they are a member of.\",\n \"in\": \"query\",\n \"name\": \"organization_id\",\n \"required\": false,\n \"schema\": {\n \"example\": \"org_01EHZNVPK3SFK441A1RGBFSHRT\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Filter users by their email address.\",\n \"in\": \"query\",\n \"name\": \"email\",\n \"required\": false,\n \"schema\": {\n \"example\": \"user@example.com\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/users\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"userland_users_controller_list_0\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List users\",\n \"tags\": [\n \"user-management.users\"\n ]\n },\n \"userland_users_controller_reset_password_0\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Sets a new password using the `token` query parameter from the link that the user received. Successfully resetting the password will verify a user's email, if it hasn't been verified yet.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"userland_users_controller_reset_password_0\",\n \"parameters\": [],\n \"path\": \"/user_management/password_reset/confirm\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreatePasswordResetDto\"\n },\n \"security\": null,\n \"skill_name\": \"userland_users_controller_reset_password_0\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Reset the password\",\n \"tags\": [\n \"user-management.users\"\n ]\n },\n \"userland_users_controller_send_email_change\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Sends an email that contains a one-time code used to change a user's email address.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"userland_users_controller_send_email_change\",\n \"parameters\": [\n {\n \"description\": \"The unique ID of the user.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"user_01E4ZCR3C56J083X43JQXF3JK5\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/users/{id}/email_change/send\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SendEmailChangeDto\"\n },\n \"security\": null,\n \"skill_name\": \"userland_users_controller_send_email_change\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Send email change code\",\n \"tags\": [\n \"user-management.users\"\n ]\n },\n \"userland_users_controller_send_verification_email_0\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Sends an email that contains a one-time code used to verify a user's email address.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"userland_users_controller_send_verification_email_0\",\n \"parameters\": [\n {\n \"description\": \"The ID of the user.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"user_01E4ZCR3C56J083X43JQXF3JK5\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/users/{id}/email_verification/send\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"userland_users_controller_send_verification_email_0\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Send verification email\",\n \"tags\": [\n \"user-management.users\"\n ]\n },\n \"userland_users_controller_update_0\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Updates properties of a user. The omitted properties will be left unchanged.\",\n \"destructive\": true,\n \"method\": \"PUT\",\n \"operation_id\": \"userland_users_controller_update_0\",\n \"parameters\": [\n {\n \"description\": \"The unique ID of the user.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"user_01E4ZCR3C56J083X43JQXF3JK5\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/user_management/users/{id}\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UpdateUserlandUserDto\"\n },\n \"security\": null,\n \"skill_name\": \"userland_users_controller_update_0\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Update a user\",\n \"tags\": [\n \"user-management.users\"\n ]\n },\n \"webhook_endpoints_controller_create\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Create a new webhook endpoint to receive event notifications.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"webhook_endpoints_controller_create\",\n \"parameters\": [],\n \"path\": \"/webhook_endpoints\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreateWebhookEndpointDto\"\n },\n \"security\": null,\n \"skill_name\": \"webhook_endpoints_controller_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Create a Webhook Endpoint\",\n \"tags\": [\n \"webhooks\"\n ]\n },\n \"webhook_endpoints_controller_delete\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Delete an existing webhook endpoint.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"webhook_endpoints_controller_delete\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier of the Webhook Endpoint.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"we_0123456789\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/webhook_endpoints/{id}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"webhook_endpoints_controller_delete\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Delete a Webhook Endpoint\",\n \"tags\": [\n \"webhooks\"\n ]\n },\n \"webhook_endpoints_controller_list\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get a list of all of your existing webhook endpoints.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"webhook_endpoints_controller_list\",\n \"parameters\": [\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"before\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ123456789ABCDEFGHIJ\",\n \"type\": \"string\"\n }\n },\n {\n \"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\\\"`.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": \"xxx_01HXYZ987654321KJIHGFEDCBA\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Upper limit on the number of objects to return, between `1` and `100`.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 10,\n \"example\": 10,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"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).\",\n \"in\": \"query\",\n \"name\": \"order\",\n \"required\": false,\n \"schema\": {\n \"$ref\": \"#/components/schemas/PaginationOrder\"\n }\n }\n ],\n \"path\": \"/webhook_endpoints\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"webhook_endpoints_controller_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"List Webhook Endpoints\",\n \"tags\": [\n \"webhooks\"\n ]\n },\n \"webhook_endpoints_controller_update\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Update the properties of an existing webhook endpoint.\",\n \"destructive\": true,\n \"method\": \"PATCH\",\n \"operation_id\": \"webhook_endpoints_controller_update\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier of the Webhook Endpoint.\",\n \"in\": \"path\",\n \"name\": \"id\",\n \"required\": true,\n \"schema\": {\n \"example\": \"we_0123456789\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/webhook_endpoints/{id}\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UpdateWebhookEndpointDto\"\n },\n \"security\": null,\n \"skill_name\": \"webhook_endpoints_controller_update\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Update a Webhook Endpoint\",\n \"tags\": [\n \"webhooks\"\n ]\n },\n \"widgets_public_controller_issue_widget_session_token\": {\n \"base_url\": \"https://api.workos.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Generate a widget token scoped to an organization and user with the specified scopes.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"widgets_public_controller_issue_widget_session_token\",\n \"parameters\": [],\n \"path\": \"/widgets/token\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WidgetSessionTokenDto\"\n },\n \"security\": null,\n \"skill_name\": \"widgets_public_controller_issue_widget_session_token\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml\",\n \"source_title\": \"WorkOS\",\n \"summary\": \"Generate a widget token\",\n \"tags\": [\n \"widgets\"\n ]\n }\n}") +OPERATION_GROUPS = json.loads("[\n {\n \"common_prefix\": \"/api_keys\",\n \"description\": \"Handle 3 OpenAPI operation(s) under /api_keys for the api keys route group.\",\n \"id\": \"api_keys\",\n \"label\": \"api keys\",\n \"operation_ids\": [\n \"api_keys_controller_validate_api_key\",\n \"api_keys_controller_delete\",\n \"api_keys_controller_expire\"\n ],\n \"skill_dir\": \"api-keys\",\n \"skill_name\": \"api-keys-routes\",\n \"skill_path\": \"skills/api-keys/SKILL.md\",\n \"subagent_name\": \"api-keys-api\"\n },\n {\n \"common_prefix\": \"/audit_logs\",\n \"description\": \"Handle 6 OpenAPI operation(s) under /audit_logs for the audit logs route group.\",\n \"id\": \"audit_logs\",\n \"label\": \"audit logs\",\n \"operation_ids\": [\n \"audit_log_validators_controller_list\",\n \"audit_log_validator_versions_controller_create\",\n \"audit_log_validator_versions_controller_schemas\",\n \"audit_log_events_controller_create\",\n \"audit_log_exports_controller_exports\",\n \"audit_log_exports_controller_export\"\n ],\n \"skill_dir\": \"audit-logs\",\n \"skill_name\": \"audit-logs-routes\",\n \"skill_path\": \"skills/audit-logs/SKILL.md\",\n \"subagent_name\": \"audit-logs-api\"\n },\n {\n \"common_prefix\": \"/auth\",\n \"description\": \"Handle 5 OpenAPI operation(s) under /auth for the auth route group.\",\n \"id\": \"auth\",\n \"label\": \"auth\",\n \"operation_ids\": [\n \"authentication_challenges_controller_verify\",\n \"authentication_factors_controller_create\",\n \"authentication_factors_controller_get\",\n \"authentication_factors_controller_delete\",\n \"authentication_factors_controller_challenge\"\n ],\n \"skill_dir\": \"auth\",\n \"skill_name\": \"auth-routes\",\n \"skill_path\": \"skills/auth/SKILL.md\",\n \"subagent_name\": \"auth-api\"\n },\n {\n \"common_prefix\": \"/authkit/oauth2/complete\",\n \"description\": \"Handle 1 OpenAPI operation(s) under /authkit/oauth2/complete for the authkit route group.\",\n \"id\": \"authkit\",\n \"label\": \"authkit\",\n \"operation_ids\": [\n \"external_auth_controller_complete_login\"\n ],\n \"skill_dir\": \"authkit\",\n \"skill_name\": \"authkit-routes\",\n \"skill_path\": \"skills/authkit/SKILL.md\",\n \"subagent_name\": \"authkit-api\"\n },\n {\n \"common_prefix\": \"/authorization\",\n \"description\": \"Handle 45 OpenAPI operation(s) under /authorization for the authorization route group.\",\n \"id\": \"authorization\",\n \"label\": \"authorization\",\n \"operation_ids\": [\n \"authorization_group_role_assignments_controller_list\",\n \"authorization_group_role_assignments_controller_create\",\n \"authorization_group_role_assignments_controller_replace_group_role_assignments\",\n \"authorization_group_role_assignments_controller_remove_group_role_assignments\",\n \"authorization_group_role_assignments_controller_get\",\n \"authorization_group_role_assignments_controller_remove_group_role_assignment\",\n \"authorization_controller_check\",\n \"authorization_controller_list_resources_for_membership\",\n \"authorization_controller_list_effective_permissions\",\n \"authorization_controller_list_effective_permissions_by_external_id\",\n \"authorization_role_assignments_controller_list_role_assignments\",\n \"authorization_role_assignments_controller_assign_role\",\n \"authorization_role_assignments_controller_remove_role_by_criteria\",\n \"authorization_role_assignments_controller_remove_role_by_id\",\n \"authorization_organization_roles_controller_create\",\n \"authorization_organization_roles_controller_list\",\n \"authorization_organization_roles_controller_get\",\n \"authorization_organization_roles_controller_update\",\n \"authorization_organization_roles_controller_delete\",\n \"authorization_organization_role_permissions_controller_set_permissions\",\n \"authorization_organization_role_permissions_controller_add_permission\",\n \"authorization_organization_role_permissions_controller_remove_permission\",\n \"authorization_resources_by_external_id_controller_get_by_external_id\",\n \"authorization_resources_by_external_id_controller_update_by_external_id\",\n \"authorization_resources_by_external_id_controller_delete_by_external_id\",\n \"authorization_resources_by_external_id_controller_list_organization_memberships_\",\n \"authorization_role_assignments_controller_list_role_assignments_for_resource_by_\",\n \"authorization_permissions_controller_list\",\n \"authorization_permissions_controller_create\",\n \"authorization_permissions_controller_find\",\n \"authorization_permissions_controller_update\",\n \"authorization_permissions_controller_delete\",\n \"authorization_resources_controller_list\",\n \"authorization_resources_controller_create\",\n \"authorization_resources_controller_find_by_id\",\n \"authorization_resources_controller_update\",\n \"authorization_resources_controller_delete\",\n \"authorization_resources_controller_list_organization_memberships_for_resource\",\n \"authorization_role_assignments_controller_list_role_assignments_for_resource\",\n \"authorization_roles_controller_create\",\n \"authorization_roles_controller_list\",\n \"authorization_roles_controller_get\",\n \"authorization_roles_controller_update\",\n \"authorization_role_permissions_controller_set_permissions\",\n \"authorization_role_permissions_controller_add_permission\"\n ],\n \"skill_dir\": \"authorization\",\n \"skill_name\": \"authorization-routes\",\n \"skill_path\": \"skills/authorization/SKILL.md\",\n \"subagent_name\": \"authorization-api\"\n },\n {\n \"common_prefix\": \"/client/token\",\n \"description\": \"Handle 1 OpenAPI operation(s) under /client/token for the client route group.\",\n \"id\": \"client\",\n \"label\": \"client\",\n \"operation_ids\": [\n \"client_api_token_controller_issue_client_api_token\"\n ],\n \"skill_dir\": \"client\",\n \"skill_name\": \"client-routes\",\n \"skill_path\": \"skills/client/SKILL.md\",\n \"subagent_name\": \"client-api\"\n },\n {\n \"common_prefix\": \"/connect\",\n \"description\": \"Handle 8 OpenAPI operation(s) under /connect for the connect route group.\",\n \"id\": \"connect\",\n \"label\": \"connect\",\n \"operation_ids\": [\n \"applications_controller_list\",\n \"applications_controller_create\",\n \"applications_controller_find\",\n \"applications_controller_update\",\n \"applications_controller_delete\",\n \"application_credentials_controller_list\",\n \"application_credentials_controller_create\",\n \"application_credentials_controller_delete\"\n ],\n \"skill_dir\": \"connect\",\n \"skill_name\": \"connect-routes\",\n \"skill_path\": \"skills/connect/SKILL.md\",\n \"subagent_name\": \"connect-api\"\n },\n {\n \"common_prefix\": \"/connections\",\n \"description\": \"Handle 3 OpenAPI operation(s) under /connections for the connections route group.\",\n \"id\": \"connections\",\n \"label\": \"connections\",\n \"operation_ids\": [\n \"connections_controller_list\",\n \"connections_controller_find\",\n \"connections_controller_delete\"\n ],\n \"skill_dir\": \"connections\",\n \"skill_name\": \"connections-routes\",\n \"skill_path\": \"skills/connections/SKILL.md\",\n \"subagent_name\": \"connections-api\"\n },\n {\n \"common_prefix\": \"/data-integrations/{slug}\",\n \"description\": \"Handle 2 OpenAPI operation(s) under /data-integrations/{slug} for the data integrations route group.\",\n \"id\": \"data_integrations\",\n \"label\": \"data integrations\",\n \"operation_ids\": [\n \"data_integrations_controller_get_data_integration_authorize_url\",\n \"data_integrations_controller_get_userland_user_token\"\n ],\n \"skill_dir\": \"data-integrations\",\n \"skill_name\": \"data-integrations-routes\",\n \"skill_path\": \"skills/data-integrations/SKILL.md\",\n \"subagent_name\": \"data-integrations-api\"\n },\n {\n \"common_prefix\": \"/directories\",\n \"description\": \"Handle 3 OpenAPI operation(s) under /directories for the directories route group.\",\n \"id\": \"directories\",\n \"label\": \"directories\",\n \"operation_ids\": [\n \"directories_controller_list\",\n \"directories_controller_find\",\n \"directories_controller_delete_directory\"\n ],\n \"skill_dir\": \"directories\",\n \"skill_name\": \"directories-routes\",\n \"skill_path\": \"skills/directories/SKILL.md\",\n \"subagent_name\": \"directories-api\"\n },\n {\n \"common_prefix\": \"/directory_groups\",\n \"description\": \"Handle 2 OpenAPI operation(s) under /directory_groups for the directory groups route group.\",\n \"id\": \"directory_groups\",\n \"label\": \"directory groups\",\n \"operation_ids\": [\n \"directory_groups_controller_list\",\n \"directory_groups_controller_find\"\n ],\n \"skill_dir\": \"directory-groups\",\n \"skill_name\": \"directory-groups-routes\",\n \"skill_path\": \"skills/directory-groups/SKILL.md\",\n \"subagent_name\": \"directory-groups-api\"\n },\n {\n \"common_prefix\": \"/directory_users\",\n \"description\": \"Handle 2 OpenAPI operation(s) under /directory_users for the directory users route group.\",\n \"id\": \"directory_users\",\n \"label\": \"directory users\",\n \"operation_ids\": [\n \"directory_users_controller_list\",\n \"directory_users_controller_find\"\n ],\n \"skill_dir\": \"directory-users\",\n \"skill_name\": \"directory-users-routes\",\n \"skill_path\": \"skills/directory-users/SKILL.md\",\n \"subagent_name\": \"directory-users-api\"\n },\n {\n \"common_prefix\": \"/events\",\n \"description\": \"Handle 1 OpenAPI operation(s) under /events for the events route group.\",\n \"id\": \"events\",\n \"label\": \"events\",\n \"operation_ids\": [\n \"events_controller_list\"\n ],\n \"skill_dir\": \"events\",\n \"skill_name\": \"events-routes\",\n \"skill_path\": \"skills/events/SKILL.md\",\n \"subagent_name\": \"events-api\"\n },\n {\n \"common_prefix\": \"/feature-flags\",\n \"description\": \"Handle 6 OpenAPI operation(s) under /feature-flags for the feature flags route group.\",\n \"id\": \"feature_flags\",\n \"label\": \"feature flags\",\n \"operation_ids\": [\n \"feature_flags_controller_list\",\n \"feature_flags_controller_find_by_slug\",\n \"feature_flags_controller_disable_flag\",\n \"feature_flags_controller_enable_flag\",\n \"flag_targets_controller_create_target\",\n \"flag_targets_controller_delete_target\"\n ],\n \"skill_dir\": \"feature-flags\",\n \"skill_name\": \"feature-flags-routes\",\n \"skill_path\": \"skills/feature-flags/SKILL.md\",\n \"subagent_name\": \"feature-flags-api\"\n },\n {\n \"common_prefix\": \"/organization_domains\",\n \"description\": \"Handle 4 OpenAPI operation(s) under /organization_domains for the organization domains route group.\",\n \"id\": \"organization_domains\",\n \"label\": \"organization domains\",\n \"operation_ids\": [\n \"organization_domains_controller_create\",\n \"organization_domains_controller_get\",\n \"organization_domains_controller_delete\",\n \"organization_domains_controller_verify\"\n ],\n \"skill_dir\": \"organization-domains\",\n \"skill_name\": \"organization-domains-routes\",\n \"skill_path\": \"skills/organization-domains/SKILL.md\",\n \"subagent_name\": \"organization-domains-api\"\n },\n {\n \"common_prefix\": \"/organizations\",\n \"description\": \"Handle 22 OpenAPI operation(s) under /organizations for the organizations route group.\",\n \"id\": \"organizations\",\n \"label\": \"organizations\",\n \"operation_ids\": [\n \"organizations_controller_list\",\n \"organizations_controller_create\",\n \"organizations_controller_get_by_external_id\",\n \"organizations_controller_find\",\n \"organizations_controller_update_organization\",\n \"organizations_controller_delete_organization\",\n \"organizations_controller_get_audit_log_configuration\",\n \"audit_logs_retention_controller_audit_logs_retention\",\n \"audit_logs_retention_controller_update_audit_logs_retention\",\n \"organization_api_keys_controller_list\",\n \"organization_api_keys_controller_create\",\n \"provider_controller_list_for_organization\",\n \"provider_controller_configure\",\n \"organization_feature_flags_controller_list\",\n \"groups_controller_create\",\n \"groups_controller_list\",\n \"groups_controller_get\",\n \"groups_controller_update\",\n \"groups_controller_delete\",\n \"group_memberships_controller_add_member\",\n \"group_memberships_controller_list_members\",\n \"group_memberships_controller_remove_member\"\n ],\n \"skill_dir\": \"organizations\",\n \"skill_name\": \"organizations-routes\",\n \"skill_path\": \"skills/organizations/SKILL.md\",\n \"subagent_name\": \"organizations-api\"\n },\n {\n \"common_prefix\": \"/portal/generate_link\",\n \"description\": \"Handle 1 OpenAPI operation(s) under /portal/generate_link for the portal route group.\",\n \"id\": \"portal\",\n \"label\": \"portal\",\n \"operation_ids\": [\n \"portal_sessions_controller_create\"\n ],\n \"skill_dir\": \"portal\",\n \"skill_name\": \"portal-routes\",\n \"skill_path\": \"skills/portal/SKILL.md\",\n \"subagent_name\": \"portal-api\"\n },\n {\n \"common_prefix\": \"/radar\",\n \"description\": \"Handle 4 OpenAPI operation(s) under /radar for the radar route group.\",\n \"id\": \"radar\",\n \"label\": \"radar\",\n \"operation_ids\": [\n \"radar_standalone_controller_assess\",\n \"radar_standalone_controller_update_radar_attempt\",\n \"radar_standalone_controller_update_radar_list\",\n \"radar_standalone_controller_delete_radar_list_entry\"\n ],\n \"skill_dir\": \"radar\",\n \"skill_name\": \"radar-routes\",\n \"skill_path\": \"skills/radar/SKILL.md\",\n \"subagent_name\": \"radar-api\"\n },\n {\n \"common_prefix\": \"/sso\",\n \"description\": \"Handle 6 OpenAPI operation(s) under /sso for the sso route group.\",\n \"id\": \"sso\",\n \"label\": \"sso\",\n \"operation_ids\": [\n \"sso_controller_authorize\",\n \"sso_controller_json_web_key_set\",\n \"sso_controller_logout\",\n \"sso_controller_logout_authorize\",\n \"sso_controller_get_profile\",\n \"sso_controller_token\"\n ],\n \"skill_dir\": \"sso\",\n \"skill_name\": \"sso-routes\",\n \"skill_path\": \"skills/sso/SKILL.md\",\n \"subagent_name\": \"sso-api\"\n },\n {\n \"common_prefix\": \"/user_management\",\n \"description\": \"Handle 52 OpenAPI operation(s) under /user_management for the user management route group.\",\n \"id\": \"user_management\",\n \"label\": \"user management\",\n \"operation_ids\": [\n \"userland_sessions_controller_authenticate_0\",\n \"userland_sso_controller_authorize\",\n \"userland_sso_controller_device_authorization\",\n \"cors_origins_controller_create_cors_origin\",\n \"userland_users_controller_get_email_verification\",\n \"userland_user_invites_controller_list\",\n \"userland_user_invites_controller_create\",\n \"userland_user_invites_controller_get_by_token\",\n \"userland_user_invites_controller_get\",\n \"userland_user_invites_controller_accept\",\n \"userland_user_invites_controller_resend\",\n \"userland_user_invites_controller_revoke\",\n \"jwt_templates_controller_get_jwt_template\",\n \"jwt_templates_controller_update_jwt_template\",\n \"userland_magic_auth_controller_send_magic_auth_code_and_return\",\n \"userland_magic_auth_controller_get\",\n \"userland_user_organization_memberships_controller_list\",\n \"userland_user_organization_memberships_controller_create\",\n \"userland_user_organization_memberships_controller_get\",\n \"userland_user_organization_memberships_controller_delete\",\n \"userland_user_organization_memberships_controller_update\",\n \"userland_user_organization_memberships_controller_deactivate\",\n \"userland_user_organization_memberships_controller_reactivate\",\n \"organization_membership_groups_controller_list_groups\",\n \"userland_users_controller_create_password_reset_token\",\n \"userland_users_controller_reset_password_0\",\n \"userland_users_controller_get_password_reset\",\n \"redirect_uris_controller_create\",\n \"userland_sessions_controller_logout\",\n \"userland_sessions_controller_revoke_session\",\n \"userland_users_controller_list_0\",\n \"userland_users_controller_create_0\",\n \"userland_users_controller_get_by_external_id\",\n \"userland_users_controller_update_0\",\n \"userland_users_controller_get_0\",\n \"userland_users_controller_delete_0\",\n \"userland_users_controller_confirm_email_change\",\n \"userland_users_controller_send_email_change\",\n \"userland_users_controller_email_verification_0\",\n \"userland_users_controller_send_verification_email_0\",\n \"userland_user_identities_controller_get\",\n \"userland_user_sessions_controller_list\",\n \"user_api_keys_controller_list\",\n \"user_api_keys_controller_create\",\n \"userland_user_feature_flags_controller_list\",\n \"authorized_applications_controller_list\",\n \"authorized_applications_controller_delete\",\n \"data_integrations_user_management_controller_get_user_data_installation\",\n \"data_integrations_user_management_controller_delete_user_data_installation\",\n \"data_integrations_user_management_controller_get_user_data_integrations\",\n \"userland_user_authentication_factors_controller_create_0\",\n \"userland_user_authentication_factors_controller_list_0\"\n ],\n \"skill_dir\": \"user-management\",\n \"skill_name\": \"user-management-routes\",\n \"skill_path\": \"skills/user-management/SKILL.md\",\n \"subagent_name\": \"user-management-api\"\n },\n {\n \"common_prefix\": \"/vault/v1\",\n \"description\": \"Handle 11 OpenAPI operation(s) under /vault/v1 for the vault route group.\",\n \"id\": \"vault\",\n \"label\": \"vault\",\n \"operation_ids\": [\n \"jump_wire_web_key_controller_create_data_key\",\n \"jump_wire_web_key_controller_decrypt\",\n \"jump_wire_web_key_controller_rekey\",\n \"jump_wire_web_data_vault_controller_index\",\n \"jump_wire_web_data_vault_controller_create\",\n \"jump_wire_web_data_vault_controller_show_by_name\",\n \"jump_wire_web_data_vault_controller_delete\",\n \"jump_wire_web_data_vault_controller_show_by_id\",\n \"jump_wire_web_data_vault_controller_update\",\n \"jump_wire_web_data_vault_controller_describe\",\n \"jump_wire_web_data_vault_controller_versions\"\n ],\n \"skill_dir\": \"vault\",\n \"skill_name\": \"vault-routes\",\n \"skill_path\": \"skills/vault/SKILL.md\",\n \"subagent_name\": \"vault-api\"\n },\n {\n \"common_prefix\": \"/webhook_endpoints\",\n \"description\": \"Handle 4 OpenAPI operation(s) under /webhook_endpoints for the webhook endpoints route group.\",\n \"id\": \"webhook_endpoints\",\n \"label\": \"webhook endpoints\",\n \"operation_ids\": [\n \"webhook_endpoints_controller_list\",\n \"webhook_endpoints_controller_create\",\n \"webhook_endpoints_controller_update\",\n \"webhook_endpoints_controller_delete\"\n ],\n \"skill_dir\": \"webhook-endpoints\",\n \"skill_name\": \"webhook-endpoints-routes\",\n \"skill_path\": \"skills/webhook-endpoints/SKILL.md\",\n \"subagent_name\": \"webhook-endpoints-api\"\n },\n {\n \"common_prefix\": \"/widgets/token\",\n \"description\": \"Handle 1 OpenAPI operation(s) under /widgets/token for the widgets route group.\",\n \"id\": \"widgets\",\n \"label\": \"widgets\",\n \"operation_ids\": [\n \"widgets_public_controller_issue_widget_session_token\"\n ],\n \"skill_dir\": \"widgets\",\n \"skill_name\": \"widgets-routes\",\n \"skill_path\": \"skills/widgets/SKILL.md\",\n \"subagent_name\": \"widgets-api\"\n }\n]") +ROOT_SECURITY = json.loads("[\n {\n \"bearer\": []\n }\n]") +SECURITY_SCHEMES = json.loads("{\n \"access_token\": {\n \"bearerFormat\": \"JWT\",\n \"description\": \"An SSO access token returned from the Get a Profile and Token endpoint.\",\n \"scheme\": \"bearer\",\n \"type\": \"http\"\n },\n \"bearer\": {\n \"bearerFormat\": \"JWT\",\n \"description\": \"Your WorkOS API key prefixed with `sk_`. Pass it as a Bearer token: `Authorization: Bearer sk_example_123456789`.\",\n \"scheme\": \"bearer\",\n \"type\": \"http\"\n }\n}") +SECURITY_FIELDS = json.loads("{\n \"access_token\": {\n \"field\": \"ACCESS_TOKEN_TOKEN\",\n \"kind\": \"http\",\n \"scheme\": \"bearer\"\n },\n \"bearer\": {\n \"field\": \"BEARER_TOKEN\",\n \"kind\": \"http\",\n \"scheme\": \"bearer\"\n }\n}") +PATH_PARAMETER_RE = re.compile(r"{([^}/]+)}") +SOURCE_ROOT = Path(globals().get("__file__", "agent.py")).resolve().parent +SOURCE_SKILLS_DIR = SOURCE_ROOT / "skills" +RUNTIME_SKILLS_DIR = ".deepagents/openapi-skills/" + + +class OperationInput(BaseModel): + parameters: dict[str, Any] = Field( + default_factory=dict, + description="Path, query, header, and cookie parameters keyed by OpenAPI parameter name.", + ) + body: Any | None = Field(default=None, description="JSON request body, when the operation accepts one.") + + +class WorkosOpenapiAgent(A2AAgent): + name = "workos-openapi-agent" + description = "Enterprise auth and directory platform API for SSO, SCIM, orgs, audit logs, and user management." + version = "1.0" + consumer_setup = ConsumerSetup.from_fields( + ConsumerSetupField.config("OPENAPI_BASE_URL", label="API base URL", description="Override the default API server (https://api.workos.com).", required=False, input_type="url"), + ConsumerSetupField.secret("BEARER_TOKEN", label="bearer bearer credential", description="Your WorkOS API key prefixed with `sk_`. Pass it as a Bearer token: `Authorization: Bearer sk_example_123456789`.", required=True), + ConsumerSetupField.secret("ACCESS_TOKEN_TOKEN", label="access_token bearer credential", description="An SSO access token returned from the Get a Profile and Token endpoint.", required=True), + ) + llm_provisioning = LLMProvisioning.PLATFORM + pricing = Pricing( + price_per_call_usd=0.0, + caller_pays_llm=True, + notes="Uses the caller's saved LLM credential through ctx.llm.", + ) + resources = Resources(cpu="200m", memory="512Mi") + egress = EgressPolicy( + allow_hosts=('api.workos.com',), + deny_internet_by_default=True, + ) + tools_used = ("openapi", "deepagents") + capabilities = { + "openapi_auto_agent": { + "operation_count": len(OPERATIONS), + "default_base_url": DEFAULT_BASE_URL, + "source_openapi_url": 'https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml', + "source_openapi_urls": ['https://raw.githubusercontent.com/workos/openapi-spec/main/spec/open-api-spec.yaml'], + "server_urls": ['https://api.workos.com'], + "regenerable": True, + "security_schemes": list(SECURITY_SCHEMES), + } + } + + @skill( + name="auto", + description="Use the OpenAPI service to complete a natural-language goal.", + tags=("openapi", "auto"), + timeout_seconds=900, + ) + async def auto(self, ctx: RunContext, goal: str) -> dict[str, Any]: + creds = ctx.llm + if not creds.api_key: + return { + "error": "llm_credentials_missing", + "final": ( + "LLM key required. Add an LLM credential in Settings > " + "LLM credentials before running this agent." + ), + "messages": [], + } + backend = ctx.workspace_backend() + skills_root = _seed_runtime_skills(backend, ctx) + graph = create_a2a_deep_agent( + ctx, + creds=creds, + backend=backend, + tools=[], + subagents=self._operation_subagents(ctx, skills_root), + system_prompt=self._system_prompt(), + ) + result = await graph.ainvoke({"messages": [{"role": "user", "content": goal}]}) + messages = result.get("messages", []) if isinstance(result, dict) else [] + final = _message_text(messages[-1]) if messages else result + return { + "final": final, + "messages": [_message_to_dict(message) for message in messages[-8:]], + } + + + + def _operation_subagents(self, ctx: RunContext, skills_root: str) -> list[dict[str, Any]]: + subagents: list[dict[str, Any]] = [] + for group in OPERATION_GROUPS: + skill_path = ( + f"{skills_root}{group['skill_dir']}/" + if skills_root + else "" + ) + subagent = { + "name": group["subagent_name"], + "description": group["description"], + "system_prompt": self._subagent_prompt(group), + "tools": self._operation_tools(ctx, set(group["operation_ids"])), + } + if skill_path: + subagent["skills"] = [skill_path] + subagents.append(subagent) + return subagents + + def _operation_tools( + self, + ctx: RunContext, + operation_ids: set[str] | None = None, + ) -> list[StructuredTool]: + tools: list[StructuredTool] = [] + for operation_id, operation in OPERATIONS.items(): + if operation_ids is not None and operation_id not in operation_ids: + continue + async def call( + parameters: dict[str, Any] | None = None, + body: Any | None = None, + *, + _operation_id: str = operation_id, + ) -> dict[str, Any]: + return await self._request( + ctx, + _operation_id, + parameters=parameters or {}, + body=body, + ) + + tools.append( + StructuredTool.from_function( + coroutine=call, + name=operation["skill_name"], + description=self._tool_description(operation), + args_schema=OperationInput, + ) + ) + return tools + + def _system_prompt(self) -> str: + if OPERATION_GROUPS: + lines = [ + "You coordinate route-specific OpenAPI subagents.", + "Delegate API work to the matching subagent with the task tool.", + "Do not invent API responses; ask subagents to call their tools for real results.", + "If a subagent reports missing consumer setup, tell the user which setup field is required.", + "If a subagent reports that the generated OpenAPI agent may be stale, ask whether the user wants to refresh it from the latest OpenAPI spec.", + "", + "Available route groups:", + ] + for group in OPERATION_GROUPS: + lines.append( + f"- {group['subagent_name']}: {group['description']}" + ) + return "\n".join(lines) + lines = [ + "You operate an API through generated OpenAPI tools.", + "Call tools to get real results. Do not invent API responses.", + "For write, update, or delete operations, explain the intended action before calling the tool.", + "If an operation reports missing consumer setup, tell the user which setup field is required.", + "If an operation returns 404, 405, 410, or a schema/validation error that suggests the live API no longer matches these tools, tell the user this generated agent may need to be refreshed from the latest OpenAPI spec and ask whether they want to refresh it.", + "", + "Available operations:", + ] + for operation in OPERATIONS.values(): + marker = "WRITE" if operation.get("destructive") else "READ" + lines.append( + f"- {operation['skill_name']}: {marker} {operation['method']} {operation['path']} — {operation['summary']}" + ) + return "\n".join(lines) + + def _subagent_prompt(self, group: dict[str, Any]) -> str: + lines = [ + "You operate one route group from a generated OpenAPI API.", + "Use the available operation tools to make real API calls. Do not invent API responses.", + "Read the route group's SKILL.md when it applies; it lists every route you cover.", + "For write, update, or delete operations, explain the intended action before calling the tool.", + "If an operation reports missing consumer setup, return the exact setup field name.", + "If an operation returns 404, 405, 410, or a schema/validation error that suggests the live API no longer matches these tools, say the generated agent may need to be refreshed from the latest OpenAPI spec.", + "", + f"Route group: {group['label']}", + f"Common prefix: {group.get('common_prefix') or '/'}", + "Available operation tools:", + ] + for operation_id in group["operation_ids"]: + operation = OPERATIONS[operation_id] + marker = "WRITE" if operation.get("destructive") else "READ" + lines.append( + f"- {operation['skill_name']}: {marker} {operation['method']} {operation['path']} - {operation['summary']}" + ) + return "\n".join(lines) + + def _tool_description(self, operation: dict[str, Any]) -> str: + parts = [ + f"{operation['method']} {operation['path']}", + str(operation.get("description") or operation.get("summary") or ""), + ] + if operation.get("parameters"): + parts.append( + "Parameters: " + + ", ".join( + f"{p['name']} in {p['in']}{' required' if p.get('required') else ''}" + for p in operation["parameters"] + ) + ) + if operation.get("request_body") is not None: + parts.append("Accepts a JSON request body.") + return "\n".join(part for part in parts if part) + + async def _request( + self, + ctx: RunContext, + operation_id: str, + *, + parameters: dict[str, Any], + body: Any | None, + ) -> dict[str, Any]: + operation = OPERATIONS[operation_id] + default_base_url = str(operation.get("base_url") or DEFAULT_BASE_URL).rstrip("/") + base_url_field = str(operation.get("base_url_field") or "OPENAPI_BASE_URL") + base_url = str(ctx.consumer_config(base_url_field, default_base_url) or default_base_url).rstrip("/") + url, query, headers = self._request_parts(ctx, operation, parameters) + request_kwargs: dict[str, Any] = { + "params": query, + "headers": headers, + } + if body is not None: + if isinstance(body, (bytes, bytearray)): + body = body.decode("utf-8", errors="replace") + if isinstance(body, str): + stripped = body.strip() + if stripped and stripped[0] in "{[": + try: + body = json.loads(stripped) + except ValueError: + pass + request_kwargs["json"] = body + async with httpx.AsyncClient(timeout=60.0, follow_redirects=True) as client: + response = await client.request( + operation["method"], + f"{base_url}{url}", + **request_kwargs, + ) + content_type = response.headers.get("content-type", "") + try: + payload: Any = response.json() if "json" in content_type else response.text + except ValueError: + payload = response.text + if response.status_code >= 400: + out = { + "ok": False, + "status_code": response.status_code, + "operation_id": operation_id, + "error": payload, + } + if response.status_code in {404, 405, 410, 422}: + out["stale_openapi_hint"] = ( + "This generated OpenAPI agent may be stale. Ask the user " + "whether they want to refresh it from the latest OpenAPI spec." + ) + return out + return { + "ok": True, + "status_code": response.status_code, + "operation_id": operation_id, + "result": payload, + } + + def _request_parts( + self, + ctx: RunContext, + operation: dict[str, Any], + parameters: dict[str, Any], + ) -> tuple[str, dict[str, Any], dict[str, str]]: + path = operation["path"] + query: dict[str, Any] = {} + headers: dict[str, str] = {} + cookies: dict[str, Any] = {} + for param in operation.get("parameters") or []: + name = param["name"] + if name not in parameters: + if param.get("required"): + raise ValueError(f"missing required parameter {name!r}") + continue + value = parameters[name] + location = param["in"] + if location == "path": + path = path.replace("{" + name + "}", str(value)) + elif location == "query": + query[name] = value + elif location == "header": + headers[name] = str(value) + elif location == "cookie": + cookies[name] = value + unresolved = PATH_PARAMETER_RE.findall(path) + if unresolved: + missing = ", ".join(sorted(set(unresolved))) + raise ValueError("missing required path parameter(s): " + missing) + if cookies: + headers["cookie"] = "; ".join(f"{key}={value}" for key, value in cookies.items()) + auth_headers, auth_query = self._auth_for_operation(ctx, operation) + headers.update(auth_headers) + query.update(auth_query) + return path, query, headers + + def _auth_for_operation(self, ctx: RunContext, operation: dict[str, Any]) -> tuple[dict[str, str], dict[str, Any]]: + requirements = operation.get("security") + if requirements is None: + requirements = ROOT_SECURITY + if requirements == []: + return {}, {} + missing: list[str] = [] + for requirement in requirements or []: + if not isinstance(requirement, dict) or not requirement: + return {}, {} + headers: dict[str, str] = {} + query: dict[str, Any] = {} + ok = True + for scheme_name in requirement: + mapping = SECURITY_FIELDS.get(scheme_name) or {} + secret_name = mapping.get("field") + value = _consumer_secret_optional(ctx, secret_name) if secret_name else "" + if not value: + ok = False + if secret_name: + missing.append(secret_name) + continue + kind = mapping.get("kind") + if kind == "apiKey": + prefix = mapping.get("prefix") or "" + sent_value = f"{prefix}{value}" + if mapping.get("location") == "query": + query[mapping.get("name") or scheme_name] = sent_value + else: + headers[mapping.get("name") or scheme_name] = sent_value + elif kind in {"http", "oauth2"}: + scheme = mapping.get("scheme") or "Bearer" + if scheme.lower() == "basic": + token = base64.b64encode(value.encode("utf-8")).decode("ascii") + headers["authorization"] = f"Basic {token}" + else: + headers["authorization"] = f"{scheme} {value}" + else: + ok = False + if ok: + return headers, query + if missing: + raise ConsumerSetupMissing( + "operation requires consumer setup secret(s): " + + ", ".join(sorted(set(missing))) + ) + return {}, {} + + +def _consumer_secret_optional(ctx: RunContext, name: str | None) -> str: + if not name: + return "" + try: + return ctx.consumer_secret(name) + except ConsumerSetupMissing: + return "" + + +def _runtime_skills_root(ctx: RunContext) -> str: + workspace = getattr(ctx, "_workspace", None) + prefixes = tuple(getattr(workspace, "write_prefixes", ()) or ()) + if not prefixes: + outputs_prefix = getattr(workspace, "outputs_prefix", None) + prefixes = (outputs_prefix or "outputs/",) + prefix = str(prefixes[0]).strip("/") + return f"/{prefix}/{RUNTIME_SKILLS_DIR}" if prefix else f"/{RUNTIME_SKILLS_DIR}" + + +def _seed_runtime_skills(backend: Any, ctx: RunContext) -> str: + if not SOURCE_SKILLS_DIR.exists(): + return "" + runtime_root = _runtime_skills_root(ctx) + uploads: list[tuple[str, bytes]] = [] + for path in SOURCE_SKILLS_DIR.rglob("*"): + if not path.is_file(): + continue + rel = path.relative_to(SOURCE_SKILLS_DIR).as_posix() + uploads.append((runtime_root + rel, path.read_bytes())) + if not uploads: + return "" + backend.upload_files(uploads) + return runtime_root + + +def _message_text(message: Any) -> Any: + content = getattr(message, "content", message) + return content + + +def _message_to_dict(message: Any) -> dict[str, Any]: + if isinstance(message, BaseMessage): + return message.model_dump(mode="json") + if hasattr(message, "model_dump"): + return message.model_dump(mode="json") + if isinstance(message, dict): + return message + return {"content": str(message)} + + +agent = WorkosOpenapiAgent() diff --git a/openapi.json b/openapi.json new file mode 100644 index 0000000..4f7f1ff --- /dev/null +++ b/openapi.json @@ -0,0 +1,45686 @@ +{ + "components": { + "schemas": { + "Actor": { + "description": "The user or API key that performed an action.", + "properties": { + "id": { + "description": "Unique identifier of the actor.", + "example": "key_01K8ZYT4AWJ6XP0E0S8CTBHE3P", + "type": "string" + }, + "name": { + "description": "Display name of the actor.", + "example": "My API Key", + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "title": "Actor", + "type": "object" + }, + "AddRolePermissionDto": { + "properties": { + "slug": { + "description": "The slug of the permission to add to the role.", + "example": "reports:export", + "type": "string" + } + }, + "required": [ + "slug" + ], + "type": "object" + }, + "ApiKey": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "expires_at": { + "description": "Timestamp when the API Key expires. Null means the key does not expire.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier of the API Key.", + "example": "api_key_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "last_used_at": { + "description": "Timestamp of when the API Key was last used.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "A descriptive name for the API Key.", + "example": "Production API Key", + "type": "string" + }, + "obfuscated_value": { + "description": "An obfuscated representation of the API Key value.", + "example": "sk_...3456", + "type": "string" + }, + "object": { + "const": "api_key", + "description": "Distinguishes the API Key object.", + "type": "string" + }, + "owner": { + "description": "The entity that owns the API Key.", + "discriminator": { + "propertyName": "type" + }, + "example": { + "id": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "organization" + }, + "oneOf": [ + { + "properties": { + "id": { + "description": "Unique identifier of the API Key owner.", + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "type": { + "const": "organization", + "description": "The type of the API Key owner.", + "example": "organization", + "type": "string" + } + }, + "required": [ + "type", + "id" + ], + "type": "object" + }, + { + "properties": { + "id": { + "description": "Unique identifier of the API Key owner.", + "example": "user_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "organization_id": { + "description": "Unique identifier of the organization the API Key can access.", + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "type": { + "const": "user", + "description": "The type of the API Key owner.", + "example": "user", + "type": "string" + } + }, + "required": [ + "type", + "id", + "organization_id" + ], + "type": "object" + } + ] + }, + "permissions": { + "description": "The permission slugs assigned to the API Key.", + "example": [ + "posts:read", + "posts:write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "owner", + "name", + "obfuscated_value", + "last_used_at", + "expires_at", + "permissions", + "created_at", + "updated_at" + ], + "type": "object" + }, + "ApiKeyValidationResponse": { + "properties": { + "api_key": { + "oneOf": [ + { + "$ref": "#/components/schemas/ApiKey" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "api_key" + ], + "type": "object" + }, + "AssignRoleDto": { + "allOf": [ + { + "properties": { + "role_slug": { + "description": "The slug of the role to assign.", + "example": "editor", + "type": "string" + } + }, + "required": [ + "role_slug" + ], + "type": "object" + }, + { + "oneOf": [ + { + "not": { + "anyOf": [ + { + "properties": { + "resource_external_id": { + "x-exclude-from-lint": true + } + }, + "required": [ + "resource_external_id" + ] + }, + { + "properties": { + "resource_type_slug": { + "x-exclude-from-lint": true + } + }, + "required": [ + "resource_type_slug" + ] + } + ] + }, + "properties": { + "resource_id": { + "description": "The ID of the resource. Mutually exclusive with `resource_external_id` and `resource_type_slug`.", + "example": "authz_resource_01HXYZ123456789ABCDEFGH", + "type": "string" + } + }, + "required": [ + "resource_id" + ], + "type": "object" + }, + { + "not": { + "anyOf": [ + { + "properties": { + "resource_id": { + "x-exclude-from-lint": true + } + }, + "required": [ + "resource_id" + ] + } + ] + }, + "properties": { + "resource_external_id": { + "description": "The external ID of the resource. Required with `resource_type_slug`. Mutually exclusive with `resource_id`.", + "example": "project-ext-456", + "type": "string" + }, + "resource_type_slug": { + "description": "The resource type slug. Required with `resource_external_id`. Mutually exclusive with `resource_id`.", + "example": "project", + "type": "string" + } + }, + "required": [ + "resource_external_id", + "resource_type_slug" + ], + "type": "object" + } + ] + } + ], + "x-mutually-exclusive-body-groups": { + "resource_target": { + "optional": false, + "variants": { + "by_external_id": [ + "resource_external_id", + "resource_type_slug" + ], + "by_id": [ + "resource_id" + ] + } + } + } + }, + "AuditLogActionJson": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "name": { + "description": "Identifier of what action was taken.", + "example": "user.viewed_invoice", + "type": "string" + }, + "object": { + "const": "audit_log_action", + "description": "Distinguishes the Audit Log Action object.", + "example": "audit_log_action", + "type": "string" + }, + "schema": { + "$ref": "#/components/schemas/AuditLogSchemaJson", + "description": "The schema associated with the action." + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "name", + "schema", + "created_at", + "updated_at" + ], + "type": "object" + }, + "AuditLogConfiguration": { + "properties": { + "log_stream": { + "description": "The Audit Log Stream currently configured for the organization, if any.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "Unique identifier of the Audit Log Stream.", + "example": "als_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "last_synced_at": { + "description": "ISO-8601 timestamp of when the last event was successfully synced, or null if no events have been synced.", + "example": "2026-01-15T12:00:00.000Z", + "type": [ + "string", + "null" + ] + }, + "state": { + "description": "The current state of the Audit Log Stream.", + "enum": [ + "active", + "inactive", + "error", + "invalid" + ], + "example": "active", + "type": "string" + }, + "type": { + "description": "The type of the Audit Log Stream destination.", + "enum": [ + "AzureSentinel", + "Datadog", + "GenericHttps", + "GoogleCloudStorage", + "S3", + "Snowflake", + "Splunk" + ], + "example": "Datadog", + "type": "string" + } + }, + "required": [ + "id", + "type", + "state", + "last_synced_at", + "created_at" + ], + "type": "object" + }, + "organization_id": { + "description": "Unique identifier of the Organization.", + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "retention_period_in_days": { + "description": "The number of days Audit Log events will be retained before being permanently deleted.", + "example": 30, + "type": "integer" + }, + "state": { + "description": "The current state of the audit log configuration for the organization.", + "enum": [ + "active", + "inactive", + "disabled" + ], + "example": "active", + "type": "string" + } + }, + "required": [ + "organization_id", + "retention_period_in_days", + "state" + ], + "type": "object" + }, + "AuditLogEventActorDto": { + "properties": { + "id": { + "description": "Actor identifier.", + "example": "user_TF4C5938", + "type": "string" + }, + "metadata": { + "additionalProperties": false, + "description": "Additional data associated with the event or entity.", + "example": { + "owner": "user_01GBTCQ2" + }, + "maxProperties": 50, + "patternProperties": { + "^[a-zA-Z0-9_-]{0,40}$": { + "anyOf": [ + { + "maxLength": 500, + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ] + } + }, + "type": "object" + }, + "name": { + "description": "Optional actor name.", + "example": "Jon Smith", + "type": "string" + }, + "type": { + "description": "Actor type.", + "example": "user", + "type": "string" + } + }, + "required": [ + "id", + "type" + ], + "type": "object" + }, + "AuditLogEventContextDto": { + "properties": { + "location": { + "description": "IP Address or some other geolocation identifier.", + "example": "123.123.123.123", + "type": "string" + }, + "user_agent": { + "description": "User agent string.", + "example": "Chrome/104.0.0.0", + "type": "string" + } + }, + "required": [ + "location" + ], + "type": "object" + }, + "AuditLogEventCreateResponse": { + "properties": { + "success": { + "description": "Whether the Audit Log event was created successfully.", + "example": true, + "type": "boolean" + } + }, + "required": [ + "success" + ], + "type": "object" + }, + "AuditLogEventDto": { + "properties": { + "action": { + "description": "Identifier of what happened.", + "example": "user.signed_in", + "type": "string" + }, + "actor": { + "$ref": "#/components/schemas/AuditLogEventActorDto", + "description": "The entity that performed the action." + }, + "context": { + "$ref": "#/components/schemas/AuditLogEventContextDto", + "description": "Additional context about where and how the action occurred." + }, + "metadata": { + "additionalProperties": false, + "description": "Additional data associated with the event or entity.", + "example": { + "owner": "user_01GBTCQ2" + }, + "maxProperties": 50, + "patternProperties": { + "^[a-zA-Z0-9_-]{0,40}$": { + "anyOf": [ + { + "maxLength": 500, + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ] + } + }, + "type": "object" + }, + "occurred_at": { + "description": "ISO-8601 value of when the action occurred.", + "example": "2026-02-02T16:35:39.317Z", + "format": "date-time", + "type": "string" + }, + "targets": { + "description": "The resources affected by the action.", + "items": { + "$ref": "#/components/schemas/AuditLogEventTargetDto" + }, + "type": "array" + }, + "version": { + "description": "What schema version the event is associated with.", + "example": 1, + "type": "integer" + } + }, + "required": [ + "action", + "occurred_at", + "actor", + "targets", + "context" + ], + "type": "object" + }, + "AuditLogEventIngestionDto": { + "properties": { + "event": { + "$ref": "#/components/schemas/AuditLogEventDto", + "description": "The audit log event to create." + }, + "organization_id": { + "description": "The unique ID of the Organization.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + } + }, + "required": [ + "organization_id", + "event" + ], + "type": "object" + }, + "AuditLogEventTargetDto": { + "properties": { + "id": { + "description": "Target identifier.", + "example": "user_TF4C5938", + "type": "string" + }, + "metadata": { + "additionalProperties": false, + "description": "Additional data associated with the event or entity.", + "example": { + "owner": "user_01GBTCQ2" + }, + "maxProperties": 50, + "patternProperties": { + "^[a-zA-Z0-9_-]{0,40}$": { + "anyOf": [ + { + "maxLength": 500, + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ] + } + }, + "type": "object" + }, + "name": { + "description": "Optional target name.", + "example": "Jon Smith", + "type": "string" + }, + "type": { + "description": "Target type.", + "example": "user", + "type": "string" + } + }, + "required": [ + "id", + "type" + ], + "type": "object" + }, + "AuditLogExportCreationDto": { + "properties": { + "actions": { + "description": "List of actions to filter against.", + "example": [ + "user.signed_in" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "actor_ids": { + "description": "List of actor IDs to filter against.", + "example": [ + "user_01GBZK5MP7TD1YCFQHFR22180V" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "actor_names": { + "description": "List of actor names to filter against.", + "example": [ + "Jon Smith" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "actors": { + "deprecated": true, + "description": "Deprecated. Use `actor_names` instead.", + "example": [ + "Jon Smith" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "organization_id": { + "description": "The unique ID of the Organization.", + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "range_end": { + "description": "ISO-8601 value for end of the export range.", + "example": "2022-09-02T18:09:06.996Z", + "type": "string" + }, + "range_start": { + "description": "ISO-8601 value for start of the export range.", + "example": "2022-07-02T18:09:06.996Z", + "type": "string" + }, + "targets": { + "description": "List of target types to filter against.", + "example": [ + "team" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "organization_id", + "range_start", + "range_end" + ], + "type": "object" + }, + "AuditLogExportJson": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "The unique ID of the Audit Log Export.", + "example": "audit_log_export_01GBZK5MP7TD1YCFQHFR22180V", + "type": "string" + }, + "object": { + "const": "audit_log_export", + "description": "Distinguishes the Audit Log Export object.", + "example": "audit_log_export", + "type": "string" + }, + "state": { + "description": "The state of the export. Possible values: pending, ready, error, expired.", + "enum": [ + "pending", + "ready", + "error", + "expired" + ], + "example": "ready", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "url": { + "description": "A URL to the CSV file. Only defined when the Audit Log Export is ready.", + "example": "https://exports.audit-logs.com/audit-log-exports/export.csv", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "object", + "id", + "state", + "created_at", + "updated_at" + ], + "type": "object" + }, + "AuditLogSchemaActorDto": { + "properties": { + "metadata": { + "description": "JSON schema for actor metadata.", + "example": { + "properties": { + "role": { + "type": "string" + } + }, + "type": "object" + }, + "type": "object" + } + }, + "required": [ + "metadata" + ], + "type": "object" + }, + "AuditLogSchemaDto": { + "properties": { + "actor": { + "$ref": "#/components/schemas/AuditLogSchemaActorDto", + "description": "The metadata schema for the actor." + }, + "metadata": { + "description": "Optional JSON schema for event metadata.", + "example": { + "properties": { + "transactionId": { + "type": "string" + } + }, + "type": "object" + }, + "type": "object" + }, + "targets": { + "description": "The list of targets for the schema.", + "items": { + "$ref": "#/components/schemas/AuditLogSchemaTargetDto" + }, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "targets" + ], + "type": "object" + }, + "AuditLogSchemaJson": { + "properties": { + "actor": { + "description": "The metadata schema for the actor.", + "example": { + "metadata": { + "properties": { + "role": { + "type": "string" + } + }, + "type": "object" + } + }, + "properties": { + "metadata": { + "additionalProperties": {}, + "description": "The JSON Schema definition for actor metadata.", + "type": "object" + } + }, + "required": [ + "metadata" + ], + "type": "object" + }, + "created_at": { + "description": "The timestamp when the Audit Log Schema was created.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "metadata": { + "additionalProperties": {}, + "description": "Additional data associated with the event or entity.", + "example": { + "properties": { + "transactionId": { + "type": "string" + } + }, + "type": "object" + }, + "type": "object" + }, + "object": { + "const": "audit_log_schema", + "description": "Distinguishes the Audit Log Schema object.", + "example": "audit_log_schema", + "type": "string" + }, + "targets": { + "description": "The list of targets for the schema.", + "example": [ + { + "metadata": { + "properties": { + "cost": { + "type": "number" + } + }, + "type": "object" + }, + "type": "invoice" + } + ], + "items": { + "properties": { + "metadata": { + "additionalProperties": {}, + "description": "Additional data associated with the event or entity.", + "example": { + "properties": { + "cost": { + "type": "number" + } + }, + "type": "object" + }, + "type": "object" + }, + "type": { + "description": "The type of the target resource.", + "example": "invoice", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + "type": "array" + }, + "version": { + "description": "The version of the schema.", + "example": 1, + "type": "integer" + } + }, + "required": [ + "object", + "version", + "targets", + "created_at" + ], + "type": "object" + }, + "AuditLogSchemaTargetDto": { + "properties": { + "metadata": { + "description": "Optional JSON schema for target metadata.", + "example": { + "properties": { + "cost": { + "type": "number" + } + }, + "type": "object" + }, + "type": "object" + }, + "type": { + "description": "The type of the target resource.", + "example": "invoice", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + "AuditLogsRetentionJson": { + "properties": { + "retention_period_in_days": { + "description": "The number of days Audit Log events will be retained before being permanently deleted. Valid values are 30 and 365.", + "example": 30, + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "retention_period_in_days" + ], + "type": "object" + }, + "AuthMethodMismatchError": { + "properties": { + "code": { + "const": "auth_method_mismatch", + "description": "Error code indicating the endpoint does not match the installation auth method.", + "example": "auth_method_mismatch", + "type": "string" + }, + "message": { + "description": "A human-readable explanation of the mismatch.", + "example": "This installation uses oauth authentication. Use the POST /:slug/token endpoint instead.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "AuthenticationChallenge": { + "properties": { + "authentication_factor_id": { + "description": "The unique ID of the authentication factor the challenge belongs to.", + "example": "auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ", + "type": "string" + }, + "code": { + "description": "The one-time code for the challenge.", + "example": "123456", + "type": "string" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "expires_at": { + "description": "The timestamp when the challenge will expire. Does not apply to TOTP factors.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "The unique ID of the authentication challenge.", + "example": "auth_challenge_01FVYZ5QM8N98T9ME5BCB2BBMJ", + "type": "string" + }, + "object": { + "const": "authentication_challenge", + "description": "Distinguishes the authentication challenge object.", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "authentication_factor_id", + "created_at", + "updated_at" + ], + "type": "object" + }, + "AuthenticationChallengeVerifyResponse": { + "properties": { + "challenge": { + "$ref": "#/components/schemas/AuthenticationChallenge", + "description": "The authentication challenge object." + }, + "valid": { + "description": "Whether the code was valid.", + "example": true, + "type": "boolean" + } + }, + "required": [ + "challenge", + "valid" + ], + "type": "object" + }, + "AuthenticationFactor": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "The unique ID of the factor.", + "example": "auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ", + "type": "string" + }, + "object": { + "const": "authentication_factor", + "description": "Distinguishes the authentication factor object.", + "type": "string" + }, + "sms": { + "description": "SMS-based authentication factor details.", + "properties": { + "phone_number": { + "description": "The user's phone number for SMS-based authentication.", + "example": "+15005550006", + "type": "string" + } + }, + "required": [ + "phone_number" + ], + "type": "object" + }, + "totp": { + "description": "TOTP-based authentication factor details.", + "properties": { + "issuer": { + "description": "Your application or company name displayed in the user's authenticator app. Defaults to your WorkOS team name.", + "example": "WorkOS", + "type": "string" + }, + "user": { + "description": "The user's account name displayed in their authenticator app. Defaults to the user's email.", + "example": "user@example.com", + "type": "string" + } + }, + "required": [ + "issuer", + "user" + ], + "type": "object" + }, + "type": { + "description": "The type of the factor to enroll.", + "enum": [ + "generic_otp", + "sms", + "totp", + "webauthn" + ], + "example": "totp", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "user_id": { + "description": "The ID of the [user](/reference/authkit/user).", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + "required": [ + "object", + "id", + "type", + "created_at", + "updated_at" + ], + "type": "object" + }, + "AuthenticationFactorEnrolled": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "The unique ID of the factor.", + "example": "auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ", + "type": "string" + }, + "object": { + "const": "authentication_factor", + "description": "Distinguishes the authentication factor object.", + "type": "string" + }, + "sms": { + "description": "SMS-based authentication factor details.", + "properties": { + "phone_number": { + "description": "The user's phone number for SMS-based authentication.", + "example": "+15005550006", + "type": "string" + } + }, + "required": [ + "phone_number" + ], + "type": "object" + }, + "totp": { + "description": "TOTP-based authentication factor details. Includes enrollment secrets only available at creation time.", + "properties": { + "issuer": { + "description": "Your application or company name displayed in the user's authenticator app. Defaults to your WorkOS team name.", + "example": "WorkOS", + "type": "string" + }, + "qr_code": { + "description": "Base64 encoded image containing scannable QR code.", + "example": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...", + "type": "string" + }, + "secret": { + "description": "TOTP secret that can be manually entered into some authenticator apps in place of scanning a QR code.", + "example": "JBSWY3DPEHPK3PXP", + "type": "string" + }, + "uri": { + "description": "The `otpauth` URI that is encoded by the provided `qr_code`.", + "example": "otpauth://totp/WorkOS:user@example.com?secret=JBSWY3DPEHPK3PXP&issuer=WorkOS", + "type": "string" + }, + "user": { + "description": "The user's account name displayed in their authenticator app. Defaults to the user's email.", + "example": "user@example.com", + "type": "string" + } + }, + "required": [ + "issuer", + "user", + "secret", + "qr_code", + "uri" + ], + "type": "object" + }, + "type": { + "description": "The type of the factor to enroll.", + "enum": [ + "generic_otp", + "sms", + "totp", + "webauthn" + ], + "example": "totp", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "user_id": { + "description": "The ID of the [user](/reference/authkit/user).", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + "required": [ + "object", + "id", + "type", + "created_at", + "updated_at" + ], + "type": "object" + }, + "AuthorizationCheck": { + "properties": { + "authorized": { + "description": "Whether the organization membership has the specified permission on the resource.", + "example": true, + "type": "boolean" + } + }, + "required": [ + "authorized" + ], + "type": "object" + }, + "AuthorizationPermission": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "An optional description of the Permission.", + "example": "Allows viewing document contents", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier of the Permission.", + "example": "perm_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "name": { + "description": "A descriptive name for the Permission.", + "example": "View Documents", + "type": "string" + }, + "object": { + "const": "permission", + "description": "Distinguishes the Permission object.", + "type": "string" + }, + "resource_type_slug": { + "description": "The slug of the resource type associated with the permission.", + "example": "workspace", + "type": "string" + }, + "slug": { + "description": "A unique key to reference the permission. Must be lowercase and contain only letters, numbers, hyphens, underscores, colons, periods, and asterisks.", + "example": "documents:read", + "type": "string" + }, + "system": { + "description": "Whether the permission is a system permission. System permissions are managed by WorkOS and cannot be deleted.", + "example": false, + "type": "boolean" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "slug", + "name", + "description", + "system", + "resource_type_slug", + "created_at", + "updated_at" + ], + "type": "object" + }, + "AuthorizationPermissionList": { + "properties": { + "data": { + "description": "The list of records for the current page.", + "items": { + "$ref": "#/components/schemas/AuthorizationPermission" + }, + "type": "array" + }, + "list_metadata": { + "description": "Pagination cursors for navigating between pages of results.", + "properties": { + "after": { + "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": "perm_01HXYZ987654321KJIHGFEDCBA", + "type": [ + "string", + "null" + ] + }, + "before": { + "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": "perm_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "before", + "after" + ], + "type": "object" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "required": [ + "object", + "data", + "list_metadata" + ], + "type": "object" + }, + "AuthorizationResource": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "An optional description of the Resource.", + "example": "Company website redesign project", + "type": [ + "string", + "null" + ] + }, + "external_id": { + "description": "An identifier you provide to reference the resource in your system.", + "example": "proj-456", + "type": "string" + }, + "id": { + "description": "The unique ID of the Resource.", + "example": "authz_resource_01HXYZ123456789ABCDEFGH", + "type": "string" + }, + "name": { + "description": "A human-readable name for the Resource.", + "example": "Website Redesign", + "type": "string" + }, + "object": { + "const": "authorization_resource", + "description": "Distinguishes the Resource object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization that owns the resource.", + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "parent_resource_id": { + "description": "The ID of the parent resource, if this resource is nested.", + "example": "authz_resource_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + }, + "resource_type_slug": { + "description": "The slug of the resource type this resource belongs to.", + "example": "project", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "name", + "description", + "organization_id", + "parent_resource_id", + "id", + "external_id", + "resource_type_slug", + "created_at", + "updated_at" + ], + "type": "object" + }, + "AuthorizationResourceList": { + "properties": { + "data": { + "description": "The list of records for the current page.", + "items": { + "$ref": "#/components/schemas/AuthorizationResource" + }, + "type": "array" + }, + "list_metadata": { + "description": "Pagination cursors for navigating between pages of results.", + "properties": { + "after": { + "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": "authz_resource_01HXYZ987654321KJIHGFEDCBA", + "type": [ + "string", + "null" + ] + }, + "before": { + "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": "authz_resource_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "before", + "after" + ], + "type": "object" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "required": [ + "object", + "data", + "list_metadata" + ], + "type": "object" + }, + "AuthorizedConnectApplicationList": { + "properties": { + "data": { + "description": "The list of records for the current page.", + "items": { + "properties": { + "application": { + "$ref": "#/components/schemas/ConnectApplication" + }, + "granted_scopes": { + "description": "The scopes granted by the user to the application.", + "example": [ + "openid", + "profile", + "email" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "description": "The unique ID of the authorized connect application.", + "example": "authorized_connect_app_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "oauth_resource": { + "description": "The OAuth resource associated with the authorized connect application, if one was requested.", + "example": "https://api.example.com/resource", + "type": "string" + }, + "object": { + "const": "authorized_connect_application", + "description": "Distinguishes the authorized connect application object.", + "type": "string" + } + }, + "required": [ + "object", + "id", + "granted_scopes", + "application" + ], + "type": "object" + }, + "type": "array" + }, + "list_metadata": { + "description": "Pagination cursors for navigating between pages of results.", + "properties": { + "after": { + "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": "authorized_connect_app_01HXYZ987654321KJIHGFEDCBA", + "type": [ + "string", + "null" + ] + }, + "before": { + "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": "authorized_connect_app_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "before", + "after" + ], + "type": "object" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "required": [ + "object", + "data", + "list_metadata" + ], + "type": "object" + }, + "ChallengeAuthenticationFactorDto": { + "properties": { + "sms_template": { + "description": "A custom template for the SMS message. Use the {{code}} placeholder to include the verification code.", + "example": "Your verification code is {{code}}.", + "type": "string" + } + }, + "type": "object" + }, + "CheckAuthorizationDto": { + "allOf": [ + { + "properties": { + "permission_slug": { + "description": "The slug of the permission to check.", + "example": "posts:create", + "type": "string" + } + }, + "required": [ + "permission_slug" + ], + "type": "object" + }, + { + "oneOf": [ + { + "not": { + "anyOf": [ + { + "properties": { + "resource_external_id": { + "x-exclude-from-lint": true + } + }, + "required": [ + "resource_external_id" + ] + }, + { + "properties": { + "resource_type_slug": { + "x-exclude-from-lint": true + } + }, + "required": [ + "resource_type_slug" + ] + } + ] + }, + "properties": { + "resource_id": { + "description": "The ID of the resource. Mutually exclusive with `resource_external_id` and `resource_type_slug`.", + "example": "resource_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + "required": [ + "resource_id" + ], + "type": "object" + }, + { + "not": { + "anyOf": [ + { + "properties": { + "resource_id": { + "x-exclude-from-lint": true + } + }, + "required": [ + "resource_id" + ] + } + ] + }, + "properties": { + "resource_external_id": { + "description": "The external ID of the resource. Required with `resource_type_slug`. Mutually exclusive with `resource_id`.", + "example": "my-custom-id", + "type": "string" + }, + "resource_type_slug": { + "description": "The slug of the resource type. Required with `resource_external_id`. Mutually exclusive with `resource_id`.", + "example": "document", + "type": "string" + } + }, + "required": [ + "resource_external_id", + "resource_type_slug" + ], + "type": "object" + } + ] + } + ], + "x-mutually-exclusive-body-groups": { + "resource_target": { + "optional": false, + "variants": { + "by_external_id": [ + "resource_external_id", + "resource_type_slug" + ], + "by_id": [ + "resource_id" + ] + } + } + } + }, + "ClientApiTokenDto": { + "properties": { + "organization_id": { + "description": "The ID of the organization to scope the Client API token to.", + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "user_id": { + "description": "The ID of the user to issue the Client API token for.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + "required": [ + "organization_id", + "user_id" + ], + "type": "object" + }, + "ClientApiTokenResponse": { + "properties": { + "token": { + "description": "The Client API token.", + "example": "eyJhbGciOiJSUzI1NiIsImtpZCI6InNlc3Npb24...", + "type": "string" + } + }, + "required": [ + "token" + ], + "type": "object" + }, + "ConfigureDataIntegrationBody": { + "properties": { + "client_id": { + "description": "The OAuth client ID of the organization's own application. Must be provided together with `client_secret`, and only for providers whose credentials are supplied by the organization.", + "example": "client_01EHZNVPK3SFK441A1RGBFSHRT", + "minLength": 1, + "type": "string" + }, + "client_secret": { + "description": "The OAuth client secret of the organization's own application. Must be provided together with `client_id`.", + "example": "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022", + "minLength": 1, + "type": "string" + }, + "enabled": { + "description": "Whether the provider is enabled for the organization.", + "example": true, + "type": "boolean" + }, + "scopes": { + "description": "The OAuth scopes to request for the organization. Pass `null` to inherit the provider scopes.", + "example": [ + "repo", + "user:email" + ], + "oneOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ] + } + }, + "type": "object" + }, + "ConfirmEmailChangeDto": { + "properties": { + "code": { + "description": "The one-time code used to confirm the email change.", + "example": "123456", + "type": "string" + } + }, + "required": [ + "code" + ], + "type": "object" + }, + "ConnectApplication": { + "allOf": [ + { + "properties": { + "client_id": { + "description": "The client ID of the connect application.", + "example": "client_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "A description of the connect application.", + "example": "An application for managing user access", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique ID of the connect application.", + "example": "conn_app_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "name": { + "description": "The name of the connect application.", + "example": "My Application", + "type": "string" + }, + "object": { + "const": "connect_application", + "description": "Distinguishes the connect application object.", + "example": "connect_application", + "type": "string" + }, + "scopes": { + "description": "The scopes available for this application.", + "example": [ + "openid", + "profile", + "email" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "client_id", + "description", + "name", + "scopes", + "created_at", + "updated_at" + ], + "type": "object" + }, + { + "oneOf": [ + { + "allOf": [ + { + "properties": { + "application_type": { + "const": "oauth", + "description": "The type of the application.", + "type": "string" + }, + "redirect_uris": { + "description": "The redirect URIs configured for this application.", + "items": { + "properties": { + "default": { + "description": "Whether this is the default redirect URI.", + "example": true, + "type": "boolean" + }, + "uri": { + "description": "The redirect URI for the application.", + "example": "https://example.com/callback", + "format": "uri", + "type": "string" + } + }, + "required": [ + "uri", + "default" + ], + "type": "object" + }, + "type": "array" + }, + "uses_pkce": { + "description": "Whether the application uses PKCE for authorization.", + "example": true, + "type": "boolean" + } + }, + "required": [ + "application_type", + "redirect_uris", + "uses_pkce" + ], + "type": "object" + }, + { + "oneOf": [ + { + "properties": { + "is_first_party": { + "const": true, + "description": "Whether the application is a first-party application.", + "example": true, + "type": "boolean" + } + }, + "required": [ + "is_first_party" + ], + "type": "object" + }, + { + "properties": { + "is_first_party": { + "const": false, + "description": "Whether the application is a first-party application.", + "example": false, + "type": "boolean" + }, + "organization_id": { + "description": "The ID of the organization the application belongs to.", + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "was_dynamically_registered": { + "const": false, + "description": "Whether the application was dynamically registered.", + "example": false, + "type": "boolean" + } + }, + "required": [ + "is_first_party", + "was_dynamically_registered", + "organization_id" + ], + "type": "object" + }, + { + "properties": { + "is_first_party": { + "const": false, + "description": "Whether the application is a first-party application.", + "example": false, + "type": "boolean" + }, + "was_dynamically_registered": { + "const": true, + "description": "Whether the application was dynamically registered.", + "example": true, + "type": "boolean" + } + }, + "required": [ + "is_first_party", + "was_dynamically_registered" + ], + "type": "object" + } + ] + } + ] + }, + { + "properties": { + "application_type": { + "const": "m2m", + "description": "The type of the application.", + "example": "m2m", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization the application belongs to.", + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + }, + "required": [ + "application_type", + "organization_id" + ], + "type": "object" + } + ] + } + ] + }, + "ConnectApplicationList": { + "properties": { + "data": { + "description": "The list of records for the current page.", + "items": { + "$ref": "#/components/schemas/ConnectApplication" + }, + "type": "array" + }, + "list_metadata": { + "description": "Pagination cursors for navigating between pages of results.", + "properties": { + "after": { + "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": "conn_app_01HXYZ987654321KJIHGFEDCBA", + "type": [ + "string", + "null" + ] + }, + "before": { + "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": "conn_app_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "before", + "after" + ], + "type": "object" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "required": [ + "object", + "data", + "list_metadata" + ], + "type": "object" + }, + "ConnectedAccount": { + "properties": { + "api_key_last_4": { + "description": "The last four characters of the API key, or `null` for OAuth connections.", + "example": null, + "type": [ + "string", + "null" + ] + }, + "auth_method": { + "description": "The authentication method used for this connection (`oauth` or `api_key`). Defaults to `oauth` if absent.", + "enum": [ + "oauth", + "api_key" + ], + "example": "oauth", + "type": "string" + }, + "created_at": { + "description": "The timestamp when the connection was created.", + "example": "2024-01-16T14:20:00.000Z", + "type": "string" + }, + "id": { + "description": "The unique identifier of the connected account.", + "example": "data_installation_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "connected_account", + "description": "Distinguishes the connected account object.", + "type": "string" + }, + "organization_id": { + "description": "The [Organization](/reference/organization) identifier associated with this connection, or `null` if not scoped to an organization.", + "example": null, + "type": [ + "string", + "null" + ] + }, + "scopes": { + "description": "The OAuth scopes granted for this connection.", + "example": [ + "repo", + "user:email" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "state": { + "description": "The state of the connected account:\n- `connected`: The connection is active and tokens are valid.\n- `needs_reauthorization`: The user needs to reauthorize the connection, typically because required scopes have changed.\n- `disconnected`: The connection has been disconnected.", + "enum": [ + "connected", + "needs_reauthorization", + "disconnected" + ], + "example": "connected", + "type": "string" + }, + "updated_at": { + "description": "The timestamp when the connection was last updated.", + "example": "2024-01-16T14:20:00.000Z", + "type": "string" + }, + "user_id": { + "description": "The [User](/reference/authkit/user) identifier associated with this connection.", + "example": "user_01EHZNVPK3SFK441A1RGBFSHRT", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "object", + "id", + "user_id", + "organization_id", + "scopes", + "state", + "created_at", + "updated_at" + ], + "type": "object" + }, + "Connection": { + "properties": { + "connection_type": { + "description": "The type of the SSO Connection used to authenticate the user. The Connection type may be used to dynamically generate authorization URLs.", + "enum": [ + "Pending", + "ADFSSAML", + "AdpOidc", + "AppleOAuth", + "Auth0Migration", + "Auth0SAML", + "AzureSAML", + "BitbucketOAuth", + "CasSAML", + "ClassLinkSAML", + "CleverOIDC", + "CloudflareSAML", + "CyberArkSAML", + "DiscordOAuth", + "DuoSAML", + "EntraIdOIDC", + "GenericOIDC", + "GenericSAML", + "GitHubOAuth", + "GitLabOAuth", + "GoogleOAuth", + "GoogleOIDC", + "GoogleSAML", + "IntuitOAuth", + "JumpCloudSAML", + "KeycloakSAML", + "LastPassSAML", + "LinkedInOAuth", + "LoginGovOidc", + "MagicLink", + "MicrosoftOAuth", + "MiniOrangeSAML", + "NetIqSAML", + "OktaOIDC", + "OktaSAML", + "OneLoginSAML", + "OracleSAML", + "PingFederateSAML", + "PingOneSAML", + "RipplingSAML", + "SalesforceSAML", + "ShibbolethGenericSAML", + "ShibbolethSAML", + "SimpleSamlPhpSAML", + "SalesforceOAuth", + "SlackOAuth", + "TestIdp", + "VercelMarketplaceOAuth", + "VercelOAuth", + "VMwareSAML", + "XeroOAuth" + ], + "example": "OktaSAML", + "type": "string" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "domains": { + "description": "List of Organization Domains.", + "items": { + "properties": { + "domain": { + "description": "The domain value.", + "example": "foo-corp.com", + "type": "string" + }, + "id": { + "description": "Unique identifier for the Connection Domain.", + "example": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", + "type": "string" + }, + "object": { + "const": "connection_domain", + "description": "Distinguishes the Connection Domain object.", + "type": "string" + } + }, + "required": [ + "id", + "object", + "domain" + ], + "type": "object" + }, + "type": "array" + }, + "id": { + "description": "Unique identifier for the Connection.", + "example": "conn_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + }, + "name": { + "description": "A human-readable name for the Connection. This will most commonly be the organization's name.", + "example": "Foo Corp", + "type": "string" + }, + "object": { + "const": "connection", + "description": "Distinguishes the Connection object.", + "type": "string" + }, + "options": { + "description": "Configuration options for SAML connections. Only present for SAML connection types.", + "properties": { + "signing_cert": { + "description": "The signing certificate of the SAML connection.", + "example": null, + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "signing_cert" + ], + "type": "object" + }, + "organization_id": { + "description": "Unique identifier for the Organization in which the Connection resides.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "state": { + "description": "Indicates whether a Connection is able to authenticate users.", + "enum": [ + "requires_type", + "draft", + "active", + "validating", + "inactive", + "deleting" + ], + "example": "active", + "type": "string" + }, + "status": { + "deprecated": true, + "description": "Deprecated. Use `state` instead.", + "enum": [ + "linked", + "unlinked" + ], + "example": "linked", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "connection_type", + "name", + "state", + "status", + "domains", + "created_at", + "updated_at" + ], + "type": "object" + }, + "ConnectionList": { + "properties": { + "data": { + "description": "The list of records for the current page.", + "items": { + "$ref": "#/components/schemas/Connection" + }, + "type": "array" + }, + "list_metadata": { + "description": "Pagination cursors for navigating between pages of results.", + "properties": { + "after": { + "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": "conn_01HXYZ987654321KJIHGFEDCBA", + "type": [ + "string", + "null" + ] + }, + "before": { + "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": "conn_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "before", + "after" + ], + "type": "object" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "required": [ + "object", + "data", + "list_metadata", + "list_metadata" + ], + "type": "object" + }, + "CorsOriginResponse": { + "properties": { + "created_at": { + "description": "Timestamp when the CORS origin was created.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "Unique identifier of the CORS origin.", + "example": "cors_origin_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "object": { + "const": "cors_origin", + "description": "Distinguishes the CORS origin object.", + "type": "string" + }, + "origin": { + "description": "The origin URL.", + "example": "https://example.com", + "type": "string" + }, + "updated_at": { + "description": "Timestamp when the CORS origin was last updated.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "origin", + "created_at", + "updated_at" + ], + "type": "object" + }, + "CreateApplicationSecretDto": { + "properties": {}, + "type": "object" + }, + "CreateAuthorizationPermissionDto": { + "properties": { + "description": { + "description": "An optional description of the Permission.", + "example": "Allows viewing document contents", + "maxLength": 150, + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "A descriptive name for the Permission.", + "example": "View Documents", + "maxLength": 48, + "type": "string" + }, + "resource_type_slug": { + "description": "The slug of the resource type this permission is scoped to.", + "example": "document", + "maxLength": 48, + "type": "string" + }, + "slug": { + "description": "A unique key to reference the permission. Must be lowercase and contain only letters, numbers, hyphens, underscores, colons, periods, and asterisks.", + "example": "documents:read", + "maxLength": 48, + "type": "string" + } + }, + "required": [ + "slug", + "name" + ], + "type": "object" + }, + "CreateAuthorizationResourceDto": { + "allOf": [ + { + "properties": { + "description": { + "description": "An optional description of the resource.", + "example": "Primary workspace for the Acme team", + "maxLength": 150, + "type": [ + "string", + "null" + ] + }, + "external_id": { + "description": "An external identifier for the resource.", + "example": "my-workspace-01", + "maxLength": 128, + "pattern": "^[\\x00-\\x7F]+$", + "type": "string" + }, + "name": { + "description": "A display name for the resource.", + "example": "Acme Workspace", + "maxLength": 48, + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization this resource belongs to.", + "example": "org_01EHQMYV6MBK39QC5PZXHY59C3", + "type": "string" + }, + "resource_type_slug": { + "description": "The slug of the resource type.", + "example": "workspace", + "type": "string" + } + }, + "required": [ + "external_id", + "name", + "resource_type_slug", + "organization_id" + ], + "type": "object" + }, + { + "oneOf": [ + { + "not": { + "anyOf": [ + { + "properties": { + "parent_resource_id": { + "x-exclude-from-lint": true + } + }, + "required": [ + "parent_resource_id" + ] + }, + { + "properties": { + "parent_resource_external_id": { + "x-exclude-from-lint": true + } + }, + "required": [ + "parent_resource_external_id" + ] + }, + { + "properties": { + "parent_resource_type_slug": { + "x-exclude-from-lint": true + } + }, + "required": [ + "parent_resource_type_slug" + ] + } + ] + }, + "type": "object" + }, + { + "not": { + "anyOf": [ + { + "properties": { + "parent_resource_external_id": { + "x-exclude-from-lint": true + } + }, + "required": [ + "parent_resource_external_id" + ] + }, + { + "properties": { + "parent_resource_type_slug": { + "x-exclude-from-lint": true + } + }, + "required": [ + "parent_resource_type_slug" + ] + } + ] + }, + "properties": { + "parent_resource_id": { + "description": "The ID of the parent resource. Mutually exclusive with `parent_resource_external_id` and `parent_resource_type_slug`.", + "example": "authz_resource_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "parent_resource_id" + ], + "type": "object" + }, + { + "not": { + "anyOf": [ + { + "properties": { + "parent_resource_id": { + "x-exclude-from-lint": true + } + }, + "required": [ + "parent_resource_id" + ] + } + ] + }, + "properties": { + "parent_resource_external_id": { + "description": "The external ID of the parent resource. Required with `parent_resource_type_slug`. Mutually exclusive with `parent_resource_id`.", + "example": "parent-workspace-01", + "type": "string" + }, + "parent_resource_type_slug": { + "description": "The resource type slug of the parent resource. Required with `parent_resource_external_id`. Mutually exclusive with `parent_resource_id`.", + "example": "workspace", + "type": "string" + } + }, + "required": [ + "parent_resource_external_id", + "parent_resource_type_slug" + ], + "type": "object" + } + ] + } + ], + "x-mutually-exclusive-body-groups": { + "parent_resource": { + "optional": true, + "variants": { + "by_external_id": [ + "parent_resource_external_id", + "parent_resource_type_slug" + ], + "by_id": [ + "parent_resource_id" + ] + } + } + } + }, + "CreateCorsOriginDto": { + "properties": { + "origin": { + "description": "The origin URL to allow for CORS requests.", + "example": "https://example.com", + "type": "string" + } + }, + "required": [ + "origin" + ], + "type": "object" + }, + "CreateDataKeyRequest": { + "properties": { + "context": { + "additionalProperties": { + "maxLength": 500, + "type": "string" + }, + "description": "Map of values used to determine the encryption key.", + "example": { + "organization_id": "org_01K8ZYT4AWJ6XP0E0S8CTBHE3P" + }, + "maxProperties": 10, + "type": "object" + } + }, + "required": [ + "context" + ], + "title": "CreateDataKeyRequest", + "type": "object" + }, + "CreateDataKeyResponse": { + "properties": { + "context": { + "additionalProperties": { + "type": "string" + }, + "description": "Map of values used to determine the encryption key.", + "example": { + "organization_id": "org_01K8ZYT4AWJ6XP0E0S8CTBHE3P" + }, + "type": "object" + }, + "data_key": { + "description": "Base64-encoded data encryption key.", + "example": "DR9idtey9MpMrA1VRFrz30HB1yNgL2PoHZyjAkFeWgg=", + "type": "string" + }, + "encrypted_keys": { + "description": "Base64-encoded encrypted data key blob.", + "example": "V09TLkVLTS52MQBiZjUxY2NlYy03OGI0LTUyMDAtYjM4My0zNTczMGU3MWVmNjEBATEBJGJmNjVlMzI2LTQzYTAtNGIyMC04OGM0LTA3ZmYzZGU1NDM0YwF0YmY2NWUzMjYtNDNhMC00YjIwLTg4YzQtMDdmZjNkZTU0MzRj", + "type": "string" + }, + "id": { + "description": "Unique identifier for the generated data key.", + "example": "bf51ccec-78b4-5200-b383-35730e71ef61", + "type": "string" + } + }, + "required": [ + "id", + "data_key", + "encrypted_keys", + "context" + ], + "title": "CreateDataKeyResponse", + "type": "object" + }, + "CreateGroupDto": { + "properties": { + "description": { + "description": "An optional description of the Group.", + "example": "The engineering team", + "maxLength": 150, + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The name of the Group.", + "example": "Engineering", + "maxLength": 256, + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "CreateGroupMembershipDto": { + "properties": { + "organization_membership_id": { + "description": "The ID of the Organization Membership to add to the group.", + "example": "om_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + "required": [ + "organization_membership_id" + ], + "type": "object" + }, + "CreateGroupRoleAssignmentDto": { + "properties": { + "resource_external_id": { + "description": "The external ID of the resource.", + "example": "proj-456", + "type": "string" + }, + "resource_id": { + "description": "The ID of the resource. Omit along with the external-id fields to target the organization itself.", + "example": "authz_resource_01HXYZ123456789ABCDEFGH", + "type": "string" + }, + "resource_type_slug": { + "description": "The resource type slug.", + "example": "project", + "type": "string" + }, + "role_slug": { + "description": "The slug of the role to assign to the group.", + "example": "admin", + "type": "string" + } + }, + "required": [ + "role_slug" + ], + "type": "object" + }, + "CreateM2MApplicationDto": { + "properties": { + "application_type": { + "const": "m2m", + "description": "The type of application to create.", + "type": "string" + }, + "description": { + "description": "A description for the application.", + "example": "An application for managing user access", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The name of the application.", + "example": "My Application", + "type": "string" + }, + "organization_id": { + "description": "The organization ID this application belongs to.", + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "scopes": { + "description": "The OAuth scopes granted to the application.", + "example": [ + "openid", + "profile", + "email" + ], + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "name", + "application_type", + "organization_id" + ], + "type": "object" + }, + "CreateOAuthApplicationDto": { + "properties": { + "application_type": { + "const": "oauth", + "description": "The type of application to create.", + "type": "string" + }, + "description": { + "description": "A description for the application.", + "example": "An application for managing user access", + "type": [ + "string", + "null" + ] + }, + "is_first_party": { + "description": "Whether this is a first-party application. Third-party applications require an organization_id.", + "example": true, + "type": "boolean" + }, + "name": { + "description": "The name of the application.", + "example": "My Application", + "type": "string" + }, + "organization_id": { + "description": "The organization ID this application belongs to. Required when is_first_party is false.", + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": [ + "string", + "null" + ] + }, + "redirect_uris": { + "description": "Redirect URIs for the application.", + "example": [ + { + "default": true, + "uri": "https://example.com/callback" + } + ], + "items": { + "$ref": "#/components/schemas/RedirectUriDto" + }, + "type": [ + "array", + "null" + ] + }, + "scopes": { + "description": "The OAuth scopes granted to the application.", + "example": [ + "openid", + "profile", + "email" + ], + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "uses_pkce": { + "description": "Whether the application uses PKCE (Proof Key for Code Exchange).", + "example": true, + "type": [ + "boolean", + "null" + ] + } + }, + "required": [ + "name", + "application_type", + "is_first_party" + ], + "type": "object" + }, + "CreateObjectRequest": { + "properties": { + "key_context": { + "additionalProperties": { + "maxLength": 500, + "type": "string" + }, + "description": "Map of values used to determine the encryption key.", + "example": { + "organization_id": "org_01K8ZYT4AWJ6XP0E0S8CTBHE3P" + }, + "maxProperties": 10, + "type": "object" + }, + "name": { + "description": "Unique name for the object.", + "example": "my-secret", + "maxLength": 200, + "type": "string" + }, + "value": { + "description": "Plaintext data to encrypt and store.", + "example": "s3cr3t-v4lu3", + "type": "string" + } + }, + "required": [ + "name", + "value", + "key_context" + ], + "title": "CreateObjectRequest", + "type": "object" + }, + "CreateOrganizationApiKeyDto": { + "properties": { + "expires_at": { + "description": "The timestamp when the API key should expire. Must be a future timestamp. If omitted, the key does not expire.", + "example": "2030-01-01T00:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "name": { + "description": "The name for the API key.", + "example": "Production API Key", + "type": "string" + }, + "permissions": { + "description": "The permission slugs to assign to the API key.", + "example": [ + "posts:read", + "posts:write" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "CreateOrganizationDomainDto": { + "properties": { + "domain": { + "description": "The domain to add to the organization.", + "example": "foo-corp.com", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization to add the domain to.", + "example": "org_01EHQMYV6MBK39QC5PZXHY59C3", + "type": "string" + } + }, + "required": [ + "domain", + "organization_id" + ], + "type": "object" + }, + "CreateOrganizationRoleDto": { + "properties": { + "description": { + "description": "An optional description of the role's purpose.", + "example": "Can manage billing and invoices", + "maxLength": 150, + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "A descriptive name for the role.", + "example": "Billing Administrator", + "maxLength": 48, + "type": "string" + }, + "resource_type_slug": { + "description": "The slug of the resource type the role is scoped to.", + "example": "organization", + "maxLength": 48, + "type": "string" + }, + "slug": { + "description": "A unique identifier for the role within the organization. When provided, must begin with 'org-' and contain only lowercase letters, numbers, hyphens, and underscores. When omitted, a slug is auto-generated from the role name and a random suffix.", + "example": "org-billing-admin", + "maxLength": 48, + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "CreatePasswordResetDto": { + "properties": { + "new_password": { + "description": "The new password to set for the user.", + "example": "strong_password_123!", + "type": "string" + }, + "token": { + "description": "The password reset token.", + "example": "Z1Y2X3W4V5U6T7S8R9Q0P1O2N3", + "type": "string" + } + }, + "required": [ + "token", + "new_password" + ], + "type": "object" + }, + "CreatePasswordResetTokenDto": { + "properties": { + "email": { + "description": "The email address of the user requesting a password reset.", + "example": "marcelina.davis@example.com", + "format": "email", + "type": "string" + } + }, + "required": [ + "email" + ], + "type": "object" + }, + "CreateRedirectUriDto": { + "properties": { + "uri": { + "description": "The redirect URI to create.", + "example": "https://example.com/callback", + "type": "string" + } + }, + "required": [ + "uri" + ], + "type": "object" + }, + "CreateRoleDto": { + "properties": { + "description": { + "description": "An optional description of the role.", + "example": "Can edit resources", + "maxLength": 150, + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "A descriptive name for the role.", + "example": "Editor", + "maxLength": 48, + "type": "string" + }, + "resource_type_slug": { + "description": "The slug of the resource type the role is scoped to.", + "example": "organization", + "maxLength": 48, + "type": "string" + }, + "slug": { + "description": "A unique slug for the role.", + "example": "editor", + "maxLength": 48, + "type": "string" + } + }, + "required": [ + "slug", + "name" + ], + "type": "object" + }, + "CreateUserApiKeyDto": { + "properties": { + "expires_at": { + "description": "The timestamp when the API key should expire. Must be a future timestamp. If omitted, the key does not expire.", + "example": "2030-01-01T00:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "name": { + "description": "A descriptive name for the API key.", + "example": "Production API Key", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization the user API key is associated with. The user must have an active membership in this organization.", + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "permissions": { + "description": "The permission slugs to assign to the API key. Each permission must be enabled for user API keys.", + "example": [ + "posts:read", + "posts:write" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "name", + "organization_id" + ], + "type": "object" + }, + "CreateUserlandMagicCodeAndReturnDto": { + "properties": { + "email": { + "description": "The email address to send the magic code to.", + "example": "marcelina.davis@example.com", + "format": "email", + "type": "string" + }, + "invitation_token": { + "description": "The invitation token to associate with this magic code.", + "example": "Z1Y2X3W4V5U6T7S8R9Q0P1O2N3", + "type": "string" + } + }, + "required": [ + "email" + ], + "type": "object" + }, + "CreateUserlandUserDto": { + "allOf": [ + { + "properties": { + "email": { + "description": "The email address of the user.", + "example": "marcelina.davis@example.com", + "format": "email", + "type": "string" + }, + "email_verified": { + "description": "Whether the user's email has been verified.", + "example": true, + "type": [ + "boolean", + "null" + ] + }, + "external_id": { + "description": "The external ID of the user.", + "example": "f1ffa2b2-c20b-4d39-be5c-212726e11222", + "maxLength": 128, + "pattern": "^[\\x00-\\x7F]+$", + "type": [ + "string", + "null" + ] + }, + "first_name": { + "description": "The first name of the user.", + "example": "Marcelina", + "type": [ + "string", + "null" + ] + }, + "last_name": { + "description": "The last name of the user.", + "example": "Davis", + "type": [ + "string", + "null" + ] + }, + "metadata": { + "additionalProperties": { + "maxLength": 600, + "type": "string" + }, + "description": "Object containing metadata key/value pairs associated with the user.", + "example": { + "timezone": "America/New_York" + }, + "maxProperties": 50, + "propertyNames": { + "maxLength": 40 + }, + "type": [ + "object", + "null" + ] + }, + "name": { + "description": "The user's full name.", + "example": "Marcelina Davis", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email" + ], + "type": "object" + }, + { + "oneOf": [ + { + "not": { + "anyOf": [ + { + "properties": { + "password": { + "x-exclude-from-lint": true + } + }, + "required": [ + "password" + ] + }, + { + "properties": { + "password_hash": { + "x-exclude-from-lint": true + } + }, + "required": [ + "password_hash" + ] + }, + { + "properties": { + "password_hash_type": { + "x-exclude-from-lint": true + } + }, + "required": [ + "password_hash_type" + ] + } + ] + }, + "type": "object" + }, + { + "not": { + "anyOf": [ + { + "properties": { + "password_hash": { + "x-exclude-from-lint": true + } + }, + "required": [ + "password_hash" + ] + }, + { + "properties": { + "password_hash_type": { + "x-exclude-from-lint": true + } + }, + "required": [ + "password_hash_type" + ] + } + ] + }, + "properties": { + "password": { + "description": "The password to set for the user. Mutually exclusive with `password_hash` and `password_hash_type`.", + "example": "strong_password_123!", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "password" + ], + "type": "object" + }, + { + "not": { + "anyOf": [ + { + "properties": { + "password": { + "x-exclude-from-lint": true + } + }, + "required": [ + "password" + ] + } + ] + }, + "properties": { + "password_hash": { + "description": "The hashed password to set for the user. Required with `password_hash_type`. Mutually exclusive with `password`.", + "example": "$2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy", + "type": "string" + }, + "password_hash_type": { + "description": "The algorithm originally used to hash the password, used when providing a `password_hash`. Required with `password_hash`. Mutually exclusive with `password`.", + "enum": [ + "bcrypt", + "firebase-scrypt", + "ssha", + "scrypt", + "pbkdf2", + "argon2" + ], + "example": "bcrypt", + "type": "string" + } + }, + "required": [ + "password_hash", + "password_hash_type" + ], + "type": "object" + } + ] + } + ], + "x-mutually-exclusive-body-groups": { + "password": { + "optional": true, + "variants": { + "hashed": [ + "password_hash", + "password_hash_type" + ], + "plaintext": [ + "password" + ] + } + } + } + }, + "CreateUserlandUserInviteOptionsDto": { + "properties": { + "email": { + "description": "The email address of the recipient.", + "example": "marcelina.davis@example.com", + "format": "email", + "type": "string" + }, + "expires_in_days": { + "description": "How many days the invitations will be valid for. Must be between 1 and 30 days. Defaults to 7 days if not specified.", + "example": 7, + "type": "integer" + }, + "inviter_user_id": { + "description": "The ID of the [user](/reference/authkit/user) who invites the recipient. The invitation email will mention the name of this user.", + "example": "user_01HYGBX8ZGD19949T3BM4FW1C3", + "type": "string" + }, + "locale": { + "description": "The locale to use when rendering the invitation email. See [supported locales](/authkit/hosted-ui/localization).", + "enum": [ + "af", + "am", + "ar", + "bg", + "bn", + "bs", + "ca", + "cs", + "da", + "de", + "de-DE", + "el", + "en", + "en-AU", + "en-CA", + "en-GB", + "en-US", + "es", + "es-419", + "es-ES", + "es-US", + "et", + "fa", + "fi", + "fil", + "fr", + "fr-BE", + "fr-CA", + "fr-FR", + "fy", + "gl", + "gu", + "ha", + "he", + "hi", + "hr", + "hu", + "hy", + "id", + "is", + "it", + "it-IT", + "ja", + "jv", + "ka", + "kk", + "km", + "kn", + "ko", + "lt", + "lv", + "mk", + "ml", + "mn", + "mr", + "ms", + "my", + "nb", + "ne", + "nl", + "nl-BE", + "nl-NL", + "nn", + "no", + "pa", + "pl", + "pt", + "pt-BR", + "pt-PT", + "ro", + "ru", + "sk", + "sl", + "sq", + "sr", + "sv", + "sw", + "ta", + "te", + "th", + "tr", + "uk", + "ur", + "uz", + "vi", + "zh", + "zh-CN", + "zh-HK", + "zh-TW", + "zu" + ], + "example": "en", + "type": "string" + }, + "organization_id": { + "description": "The ID of the [organization](/reference/organization) that the recipient will join.", + "example": "org_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + }, + "role_slug": { + "description": "The [role](/authkit/roles) that the recipient will receive when they join the organization in the invitation.", + "example": "admin", + "type": "string" + } + }, + "required": [ + "email" + ], + "type": "object" + }, + "CreateUserlandUserOrganizationMembershipDto": { + "allOf": [ + { + "properties": { + "organization_id": { + "description": "The ID of the [organization](/reference/organization) which the user belongs to.", + "example": "org_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + }, + "user_id": { + "description": "The ID of the [user](/reference/authkit/user).", + "example": "user_01E4ZCR3C5A4QZ2Z2JQXGKZJ9E", + "type": "string" + } + }, + "required": [ + "user_id", + "organization_id" + ], + "type": "object" + }, + { + "oneOf": [ + { + "not": { + "anyOf": [ + { + "properties": { + "role_slug": { + "x-exclude-from-lint": true + } + }, + "required": [ + "role_slug" + ] + }, + { + "properties": { + "role_slugs": { + "x-exclude-from-lint": true + } + }, + "required": [ + "role_slugs" + ] + } + ] + }, + "type": "object" + }, + { + "not": { + "anyOf": [ + { + "properties": { + "role_slugs": { + "x-exclude-from-lint": true + } + }, + "required": [ + "role_slugs" + ] + } + ] + }, + "properties": { + "role_slug": { + "description": "A single role identifier. Defaults to `member` or the explicit default role. Mutually exclusive with `role_slugs`.", + "example": "admin", + "type": "string" + } + }, + "required": [ + "role_slug" + ], + "type": "object" + }, + { + "not": { + "anyOf": [ + { + "properties": { + "role_slug": { + "x-exclude-from-lint": true + } + }, + "required": [ + "role_slug" + ] + } + ] + }, + "properties": { + "role_slugs": { + "description": "An array of role identifiers. Limited to one role when Multiple Roles is disabled. Mutually exclusive with `role_slug`.", + "example": [ + "admin" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "role_slugs" + ], + "type": "object" + } + ] + } + ], + "x-mutually-exclusive-body-groups": { + "role": { + "optional": true, + "variants": { + "multiple": [ + "role_slugs" + ], + "single": [ + "role_slug" + ] + } + } + } + }, + "CreateWebhookEndpointDto": { + "properties": { + "endpoint_url": { + "description": "The HTTPS URL where webhooks will be sent.", + "example": "https://example.com/webhooks", + "type": "string" + }, + "events": { + "description": "The events that the Webhook Endpoint is subscribed to.", + "example": [ + "user.created", + "dsync.user.created" + ], + "items": { + "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", + "api_key.updated", + "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", + "pipes.connected_account.connected", + "pipes.connected_account.connection_failed", + "pipes.connected_account.disconnected", + "pipes.connected_account.reauthorization_needed", + "session.created", + "session.reauthenticated", + "session.revoked", + "waitlist_user.approved", + "waitlist_user.created", + "waitlist_user.denied" + ], + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "endpoint_url", + "events" + ], + "type": "object" + }, + "DataIntegrationAccessTokenResponse": { + "oneOf": [ + { + "properties": { + "access_token": { + "description": "The [access token](/reference/pipes/access-token) object, present when `active` is `true`.", + "properties": { + "access_token": { + "description": "The OAuth access token for the connected integration.", + "example": "gho_16C7e42F292c6912E7710c838347Ae178B4a", + "type": "string" + }, + "expires_at": { + "description": "The ISO-8601 formatted timestamp indicating when the access token expires.", + "example": "2025-12-31T23:59:59.000Z", + "type": [ + "string", + "null" + ] + }, + "missing_scopes": { + "description": "If the integration has requested scopes that aren't present on the access token, they're listed here.", + "example": [], + "items": { + "type": "string" + }, + "type": "array" + }, + "object": { + "const": "access_token", + "description": "Distinguishes the access token object.", + "type": "string" + }, + "scopes": { + "description": "The scopes granted to the access token.", + "example": [ + "repo", + "user:email" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "object", + "access_token", + "expires_at", + "scopes", + "missing_scopes" + ], + "type": "object" + }, + "active": { + "const": true, + "description": "Indicates whether the access token is valid and ready for use, or if reauthorization is required.", + "type": "boolean" + } + }, + "required": [ + "active", + "access_token" + ], + "type": "object" + }, + { + "properties": { + "active": { + "const": false, + "description": "Indicates whether the access token is valid and ready for use, or if reauthorization is required.", + "type": "boolean" + }, + "error": { + "description": "- `\"not_installed\"`: The user does not have the integration installed.\n- `\"needs_reauthorization\"`: The user needs to reauthorize the integration.", + "enum": [ + "needs_reauthorization", + "not_installed" + ], + "example": "not_installed", + "type": "string" + } + }, + "required": [ + "active", + "error" + ], + "type": "object" + } + ] + }, + "DataIntegrationAuthorizeUrlResponse": { + "properties": { + "url": { + "description": "The OAuth authorization URL to redirect the user to.", + "example": "https://api.workos.com/data-integrations/q2czJKmVAraSBg8xFpT7M9uR/authorize-redirect", + "type": "string" + } + }, + "required": [ + "url" + ], + "type": "object" + }, + "DataIntegrationConfigurationListResponse": { + "properties": { + "data": { + "description": "A list of data integration configurations for the organization.", + "items": { + "$ref": "#/components/schemas/DataIntegrationConfigurationResponse" + }, + "type": "array" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "required": [ + "object", + "data" + ], + "type": "object" + }, + "DataIntegrationConfigurationResponse": { + "properties": { + "created_at": { + "description": "The timestamp when the configuration was created.", + "example": "2024-01-15T10:30:00.000Z", + "type": "string" + }, + "credentials": { + "$ref": "#/components/schemas/DataIntegrationCredentials" + }, + "enabled": { + "description": "Whether the integration is enabled for this organization. Reflects the organization override when one exists, otherwise the provider default.", + "example": true, + "type": "boolean" + }, + "id": { + "description": "The unique identifier of the data integration.", + "example": "data_integration_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "name": { + "description": "The display name of the data integration.", + "example": "GitHub", + "type": "string" + }, + "object": { + "const": "data_integration_configuration", + "description": "Distinguishes the data integration configuration object.", + "type": "string" + }, + "organization_id": { + "description": "The [Organization](/reference/organization) this configuration applies to.", + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "scopes": { + "description": "The OAuth scopes in effect for this organization. Reflects the organization override when one is set, otherwise the provider scopes, or `null` when none are configured.", + "example": [ + "repo", + "user:email" + ], + "oneOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "slug": { + "description": "The slug identifier of the provider (e.g., `github`, `slack`, `notion`).", + "example": "github", + "type": "string" + }, + "updated_at": { + "description": "The timestamp when the configuration was last updated.", + "example": "2024-01-15T10:30:00.000Z", + "type": "string" + } + }, + "required": [ + "object", + "id", + "organization_id", + "slug", + "name", + "enabled", + "scopes", + "created_at", + "updated_at" + ], + "type": "object" + }, + "DataIntegrationCredentials": { + "description": "Organization-managed OAuth credential configuration. Present only for integrations whose credentials are supplied by the organization; absent otherwise.", + "properties": { + "client_id": { + "description": "The OAuth client ID supplied by the organization, or `null` when none is configured.", + "example": "client_01EHZNVPK3SFK441A1RGBFSHRT", + "type": [ + "string", + "null" + ] + }, + "client_secret_last_four": { + "description": "The last four characters of the organization-supplied OAuth client secret, or `null` when none is configured.", + "example": "1a2b", + "type": [ + "string", + "null" + ] + }, + "credentials_type": { + "description": "The credentials type for this integration (e.g., `shared`, `custom`, or `organization`).", + "enum": [ + "shared", + "custom", + "organization" + ], + "example": "organization", + "type": "string" + }, + "has_credentials": { + "description": "Whether the organization has supplied OAuth credentials for this integration.", + "example": true, + "type": "boolean" + }, + "redirect_uri": { + "description": "The redirect URI to register with the provider when configuring the organization-managed OAuth application.", + "example": "https://api.workos.com/data-integrations/github/dik_01EHZNVPK3SFK441A1RGBFSHRT/callback", + "type": "string" + } + }, + "required": [ + "credentials_type", + "has_credentials", + "client_id", + "client_secret_last_four", + "redirect_uri" + ], + "type": "object" + }, + "DataIntegrationsListResponse": { + "properties": { + "data": { + "description": "A list of [providers](/reference/pipes/provider), each including a [`connected_account`](/reference/pipes/connected-account) field with the user's connection status.", + "items": { + "properties": { + "auth_methods": { + "description": "The authentication methods supported by this provider (`oauth`, `api_key`, or both). Defaults to `[\"oauth\"]` if absent.", + "example": [ + "oauth" + ], + "items": { + "enum": [ + "oauth", + "api_key" + ], + "type": "string" + }, + "type": "array" + }, + "connected_account": { + "description": "The user's [connected account](/reference/pipes/connected-account) for this provider, or `null` if the user has not connected.", + "oneOf": [ + { + "properties": { + "api_key_last_4": { + "description": "The last four characters of the API key, or `null` for OAuth connections.", + "example": null, + "type": [ + "string", + "null" + ] + }, + "auth_method": { + "description": "The authentication method used for this connection (`oauth` or `api_key`). Defaults to `oauth` if absent.", + "enum": [ + "oauth", + "api_key" + ], + "example": "oauth", + "type": "string" + }, + "createdAt": { + "deprecated": true, + "description": "Use `created_at` instead.", + "type": "string" + }, + "created_at": { + "description": "The timestamp when the connection was created.", + "example": "2024-01-16T14:20:00.000Z", + "type": "string" + }, + "id": { + "description": "The unique identifier of the connected account.", + "example": "data_installation_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "connected_account", + "description": "Distinguishes the connected account object.", + "type": "string" + }, + "organizationId": { + "deprecated": true, + "description": "Use `organization_id` instead.", + "type": [ + "string", + "null" + ] + }, + "organization_id": { + "description": "The [Organization](/reference/organization) identifier associated with this connection, or `null` if not scoped to an organization.", + "example": null, + "type": [ + "string", + "null" + ] + }, + "scopes": { + "description": "The OAuth scopes granted for this connection.", + "example": [ + "repo", + "user:email" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "state": { + "description": "The state of the connected account:\n- `connected`: The connection is active and tokens are valid.\n- `needs_reauthorization`: The user needs to reauthorize the connection, typically because required scopes have changed.\n- `disconnected`: The connection has been disconnected.", + "enum": [ + "connected", + "needs_reauthorization", + "disconnected" + ], + "example": "connected", + "type": "string" + }, + "updatedAt": { + "deprecated": true, + "description": "Use `updated_at` instead.", + "type": "string" + }, + "updated_at": { + "description": "The timestamp when the connection was last updated.", + "example": "2024-01-16T14:20:00.000Z", + "type": "string" + }, + "user_id": { + "description": "The [User](/reference/authkit/user) identifier associated with this connection.", + "example": "user_01EHZNVPK3SFK441A1RGBFSHRT", + "type": [ + "string", + "null" + ] + }, + "userlandUserId": { + "deprecated": true, + "description": "Use `user_id` instead.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "object", + "id", + "user_id", + "organization_id", + "scopes", + "state", + "created_at", + "updated_at", + "userlandUserId", + "organizationId", + "createdAt", + "updatedAt" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "createdAt": { + "deprecated": true, + "description": "Use created_at instead.", + "type": "string" + }, + "created_at": { + "description": "The timestamp when the provider was created.", + "example": "2024-01-15T10:30:00.000Z", + "type": "string" + }, + "credentialsType": { + "deprecated": true, + "description": "Use credentials_type instead.", + "type": "string" + }, + "credentials_type": { + "description": "The type of credentials used by the provider (e.g., `oauth2`).", + "example": "oauth2", + "type": "string" + }, + "description": { + "description": "A description of the provider explaining how it will be used, if configured.", + "example": "Connect your GitHub account to access repositories.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique identifier of the provider.", + "example": "data_integration_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "integrationType": { + "deprecated": true, + "description": "Use integration_type instead.", + "type": "string" + }, + "integration_type": { + "description": "The type of integration (e.g., `github`, `slack`).", + "example": "github", + "type": "string" + }, + "name": { + "description": "The display name of the provider (e.g., \"GitHub\", \"Slack\").", + "example": "GitHub", + "type": "string" + }, + "object": { + "const": "data_provider", + "description": "Distinguishes the data provider object.", + "type": "string" + }, + "ownership": { + "description": "Whether the provider is owned by a user or organization.", + "enum": [ + "userland_user", + "organization" + ], + "type": "string" + }, + "scopes": { + "description": "The OAuth scopes configured for this provider, or `null` if none are configured.", + "example": [ + "repo", + "user:email" + ], + "oneOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "slug": { + "description": "The slug identifier used in API calls (e.g., `github`, `slack`, `notion`).", + "example": "github", + "type": "string" + }, + "updatedAt": { + "deprecated": true, + "description": "Use updated_at instead.", + "type": "string" + }, + "updated_at": { + "description": "The timestamp when the provider was last updated.", + "example": "2024-01-15T10:30:00.000Z", + "type": "string" + } + }, + "required": [ + "object", + "id", + "name", + "description", + "slug", + "integration_type", + "credentials_type", + "scopes", + "ownership", + "created_at", + "updated_at", + "integrationType", + "credentialsType", + "createdAt", + "updatedAt", + "connected_account" + ], + "type": "object" + }, + "type": "array" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "required": [ + "object", + "data" + ], + "type": "object" + }, + "DecryptRequest": { + "properties": { + "keys": { + "description": "Base64-encoded encrypted data key to decrypt.", + "example": "V09TLkVLTS52MQBiZjUxY2NlYy03OGI0LTUyMDAtYjM4My0zNTczMGU3MWVmNjEBATEBJGJmNjVlMzI2LTQzYTAtNGIyMC04OGM0LTA3ZmYzZGU1NDM0YwF0YmY2NWUzMjYtNDNhMC00YjIwLTg4YzQtMDdmZjNkZTU0MzRj", + "type": "string" + } + }, + "required": [ + "keys" + ], + "title": "DecryptRequest", + "type": "object" + }, + "DecryptResponse": { + "properties": { + "data_key": { + "description": "Base64-encoded decrypted data key.", + "example": "DR9idtey9MpMrA1VRFrz30HB1yNgL2PoHZyjAkFeWgg=", + "type": "string" + }, + "id": { + "description": "Unique identifier of the decrypted data key.", + "example": "bf51ccec-78b4-5200-b383-35730e71ef61", + "type": "string" + } + }, + "required": [ + "id", + "data_key" + ], + "title": "DecryptResponse", + "type": "object" + }, + "DeleteGroupRoleAssignmentsByCriteriaDto": { + "properties": { + "resource_external_id": { + "description": "The external ID of the resource.", + "example": "proj-456", + "type": "string" + }, + "resource_id": { + "description": "The ID of the resource. Mutually exclusive with `resource_external_id` and `resource_type_slug`.", + "example": "authz_resource_01HXYZ123456789ABCDEFGH", + "type": "string" + }, + "resource_type_slug": { + "description": "The resource type slug.", + "example": "project", + "type": "string" + }, + "role_slug": { + "description": "The slug of the role to remove assignments for.", + "example": "admin", + "type": "string" + } + }, + "required": [ + "role_slug" + ], + "type": "object" + }, + "DeleteObjectResponse": { + "properties": { + "name": { + "description": "Name of the deleted object.", + "example": "my-secret", + "type": "string" + }, + "success": { + "description": "Whether the deletion succeeded.", + "example": true, + "type": "boolean" + } + }, + "required": [ + "success", + "name" + ], + "title": "DeleteObjectResponse", + "type": "object" + }, + "DeviceAuthorizationResponse": { + "properties": { + "device_code": { + "description": "The device verification code.", + "example": "CVE2wOfIFK4vhmiDBntpX9s8KT2f0qngpWYL0LGy9HxYgBRXUKIUkZB9BgIFho5h", + "type": "string" + }, + "expires_in": { + "description": "Lifetime in seconds of the codes.", + "example": 300, + "type": "number" + }, + "interval": { + "description": "Minimum polling interval in seconds.", + "example": 5, + "type": "number" + }, + "user_code": { + "description": "The end-user verification code.", + "example": "BCDF-GHJK", + "type": "string" + }, + "verification_uri": { + "description": "The end-user verification URI.", + "example": "https://authkit_domain/device", + "format": "uri", + "type": "string" + }, + "verification_uri_complete": { + "description": "Verification URI that includes the user code.", + "example": "https://authkit_domain/device?user_code=BCDF-GHJK", + "format": "uri", + "type": "string" + } + }, + "required": [ + "device_code", + "user_code", + "verification_uri", + "expires_in" + ], + "type": "object" + }, + "Directory": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "domain": { + "description": "The URL associated with an Enterprise Client.", + "example": "foo-corp.com", + "type": "string" + }, + "external_key": { + "description": "External Key for the Directory.", + "example": "sPa12dwRQ", + "type": "string" + }, + "id": { + "description": "Unique identifier for the Directory.", + "example": "directory_01ECAZ4NV9QMV47GW873HDCX74", + "type": "string" + }, + "metadata": { + "description": "Aggregate counts of directory users and groups synced from the provider.", + "properties": { + "groups": { + "description": "Count of directory groups.", + "example": 5, + "type": "integer" + }, + "users": { + "description": "Counts of active and inactive directory users.", + "properties": { + "active": { + "description": "Count of active directory users.", + "example": 42, + "type": "integer" + }, + "inactive": { + "description": "Count of inactive directory users.", + "example": 3, + "type": "integer" + } + }, + "required": [ + "active", + "inactive" + ], + "type": "object" + } + }, + "required": [ + "users", + "groups" + ], + "type": "object" + }, + "name": { + "description": "The name of the directory.", + "example": "Foo Corp", + "type": "string" + }, + "object": { + "const": "directory", + "description": "Distinguishes the Directory object.", + "type": "string" + }, + "organization_id": { + "description": "The unique identifier for the Organization in which the directory resides.", + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "state": { + "description": "Describes whether the Directory has been successfully connected to an external provider.", + "enum": [ + "linked", + "validating", + "invalid_credentials", + "unlinked", + "deleting" + ], + "example": "linked", + "type": "string" + }, + "type": { + "description": "The type of external Directory Provider integrated with.", + "enum": [ + "azure scim v2.0", + "bamboohr", + "breathe hr", + "cezanne hr", + "cyberark scim v2.0", + "fourth hr", + "generic scim v2.0", + "gsuite directory", + "hibob", + "sailpoint scim v2.0", + "jump cloud scim v2.0", + "okta scim v2.0", + "onelogin scim v2.0", + "people hr", + "personio", + "pingfederate scim v2.0", + "rippling scim v2.0", + "s3", + "sftp", + "sftp workday", + "workday" + ], + "example": "gsuite directory", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "organization_id", + "external_key", + "type", + "state", + "name", + "created_at", + "updated_at" + ], + "type": "object" + }, + "DirectoryGroup": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "directory_id": { + "description": "The identifier of the Directory the Directory Group belongs to.", + "example": "directory_01ECAZ4NV9QMV47GW873HDCX74", + "type": "string" + }, + "id": { + "description": "Unique identifier for the Directory Group.", + "example": "directory_group_01E1JJS84MFPPQ3G655FHTKX6Z", + "type": "string" + }, + "idp_id": { + "description": "Unique identifier for the group, assigned by the Directory Provider. Different Directory Providers use different ID formats.", + "example": "02grqrue4294w24", + "type": "string" + }, + "name": { + "description": "The name of the Directory Group.", + "example": "Developers", + "type": "string" + }, + "object": { + "const": "directory_group", + "description": "Distinguishes the Directory Group object.", + "type": "string" + }, + "organization_id": { + "description": "The identifier for the Organization in which the Directory resides.", + "example": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", + "type": "string" + }, + "raw_attributes": { + "additionalProperties": {}, + "description": "The raw attributes received from the directory provider.", + "type": "object" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "idp_id", + "directory_id", + "organization_id", + "name", + "created_at", + "updated_at" + ], + "type": "object" + }, + "DirectoryGroupList": { + "properties": { + "data": { + "description": "The list of records for the current page.", + "items": { + "$ref": "#/components/schemas/DirectoryGroup" + }, + "type": "array" + }, + "list_metadata": { + "description": "Pagination cursors for navigating between pages of results.", + "properties": { + "after": { + "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": "directory_group_01HXYZ987654321KJIHGFEDCBA", + "type": [ + "string", + "null" + ] + }, + "before": { + "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": "directory_group_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "before", + "after" + ], + "type": "object" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "required": [ + "object", + "data", + "list_metadata", + "list_metadata" + ], + "type": "object" + }, + "DirectoryList": { + "properties": { + "data": { + "description": "The list of records for the current page.", + "items": { + "$ref": "#/components/schemas/Directory" + }, + "type": "array" + }, + "list_metadata": { + "description": "Pagination cursors for navigating between pages of results.", + "properties": { + "after": { + "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": "directory_01HXYZ987654321KJIHGFEDCBA", + "type": [ + "string", + "null" + ] + }, + "before": { + "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": "directory_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "before", + "after" + ], + "type": "object" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "required": [ + "object", + "data", + "list_metadata", + "list_metadata" + ], + "type": "object" + }, + "DirectoryUser": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "custom_attributes": { + "additionalProperties": {}, + "description": "An object containing the custom attribute mapping for the Directory Provider.", + "example": { + "department": "Engineering", + "job_title": "Software Engineer" + }, + "type": "object" + }, + "directory_id": { + "description": "The identifier of the Directory the Directory User belongs to.", + "example": "directory_01ECAZ4NV9QMV47GW873HDCX74", + "type": "string" + }, + "email": { + "description": "The email address of the user.", + "example": "marcelina.davis@example.com", + "type": [ + "string", + "null" + ] + }, + "emails": { + "deprecated": true, + "description": "A list of email addresses for the user.", + "items": { + "properties": { + "primary": { + "description": "Whether this is the primary email address.", + "example": true, + "type": "boolean" + }, + "type": { + "description": "The type of email address.", + "example": "work", + "type": "string" + }, + "value": { + "description": "The email address value.", + "example": "marcelina.davis@example.com", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "first_name": { + "description": "The first name of the user.", + "example": "Marcelina", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the Directory User.", + "example": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", + "type": "string" + }, + "idp_id": { + "description": "Unique identifier for the user, assigned by the Directory Provider. Different Directory Providers use different ID formats.", + "example": "2836", + "type": "string" + }, + "job_title": { + "deprecated": true, + "description": "The job title of the user.", + "example": "Software Engineer", + "type": [ + "string", + "null" + ] + }, + "last_name": { + "description": "The last name of the user.", + "example": "Davis", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The full name of the user.", + "example": "Marcelina Davis", + "type": [ + "string", + "null" + ] + }, + "object": { + "const": "directory_user", + "description": "Distinguishes the Directory User object.", + "type": "string" + }, + "organization_id": { + "description": "The identifier for the Organization in which the Directory resides.", + "example": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", + "type": "string" + }, + "raw_attributes": { + "additionalProperties": {}, + "deprecated": true, + "description": "The raw attributes received from the directory provider.", + "type": "object" + }, + "role": { + "$ref": "#/components/schemas/SlimRole" + }, + "roles": { + "description": "All roles assigned to the user.", + "items": { + "$ref": "#/components/schemas/SlimRole" + }, + "type": "array" + }, + "state": { + "description": "The state of the user.", + "enum": [ + "active", + "suspended", + "inactive" + ], + "example": "active", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "username": { + "deprecated": true, + "description": "The username of the user.", + "example": "mdavis", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "object", + "id", + "directory_id", + "organization_id", + "idp_id", + "email", + "state", + "raw_attributes", + "custom_attributes", + "created_at", + "updated_at" + ], + "type": "object" + }, + "DirectoryUserList": { + "properties": { + "data": { + "description": "The list of records for the current page.", + "items": { + "$ref": "#/components/schemas/DirectoryUserWithGroups" + }, + "type": "array" + }, + "list_metadata": { + "description": "Pagination cursors for navigating between pages of results.", + "properties": { + "after": { + "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": "directory_user_01HXYZ987654321KJIHGFEDCBA", + "type": [ + "string", + "null" + ] + }, + "before": { + "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": "directory_user_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "before", + "after" + ], + "type": "object" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "required": [ + "object", + "data", + "list_metadata", + "list_metadata" + ], + "type": "object" + }, + "DirectoryUserWithGroups": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "custom_attributes": { + "additionalProperties": {}, + "description": "An object containing the custom attribute mapping for the Directory Provider.", + "example": { + "department": "Engineering", + "job_title": "Software Engineer" + }, + "type": "object" + }, + "directory_id": { + "description": "The identifier of the Directory the Directory User belongs to.", + "example": "directory_01ECAZ4NV9QMV47GW873HDCX74", + "type": "string" + }, + "email": { + "description": "The email address of the user.", + "example": "marcelina.davis@example.com", + "type": [ + "string", + "null" + ] + }, + "emails": { + "deprecated": true, + "description": "A list of email addresses for the user.", + "items": { + "properties": { + "primary": { + "description": "Whether this is the primary email address.", + "example": true, + "type": "boolean" + }, + "type": { + "description": "The type of email address.", + "example": "work", + "type": "string" + }, + "value": { + "description": "The email address value.", + "example": "marcelina.davis@example.com", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "first_name": { + "description": "The first name of the user.", + "example": "Marcelina", + "type": [ + "string", + "null" + ] + }, + "groups": { + "deprecated": true, + "description": "The directory groups the user belongs to. Deprecated: starting May 1, 2026, this field returns an empty array by default for newly created teams. Existing teams currently depending on this field should migrate to the new access pattern for better throughput performance \u2014 the field is unbounded by user, so users with many group memberships produce large, slow response payloads. Use the List Directory Groups endpoint with a `user` filter to fetch a user's group memberships.", + "items": { + "$ref": "#/components/schemas/DirectoryGroup" + }, + "type": "array" + }, + "id": { + "description": "Unique identifier for the Directory User.", + "example": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", + "type": "string" + }, + "idp_id": { + "description": "Unique identifier for the user, assigned by the Directory Provider. Different Directory Providers use different ID formats.", + "example": "2836", + "type": "string" + }, + "job_title": { + "deprecated": true, + "description": "The job title of the user.", + "example": "Software Engineer", + "type": [ + "string", + "null" + ] + }, + "last_name": { + "description": "The last name of the user.", + "example": "Davis", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The full name of the user.", + "example": "Marcelina Davis", + "type": [ + "string", + "null" + ] + }, + "object": { + "const": "directory_user", + "description": "Distinguishes the Directory User object.", + "type": "string" + }, + "organization_id": { + "description": "The identifier for the Organization in which the Directory resides.", + "example": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", + "type": "string" + }, + "raw_attributes": { + "additionalProperties": {}, + "deprecated": true, + "description": "The raw attributes received from the directory provider.", + "type": "object" + }, + "role": { + "$ref": "#/components/schemas/SlimRole" + }, + "roles": { + "description": "All roles assigned to the user.", + "items": { + "$ref": "#/components/schemas/SlimRole" + }, + "type": "array" + }, + "state": { + "description": "The state of the user.", + "enum": [ + "active", + "suspended", + "inactive" + ], + "example": "active", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "username": { + "deprecated": true, + "description": "The username of the user.", + "example": "mdavis", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "object", + "id", + "directory_id", + "organization_id", + "idp_id", + "email", + "state", + "raw_attributes", + "custom_attributes", + "created_at", + "updated_at", + "groups" + ], + "type": "object" + }, + "DomainVerificationIntentOptions": { + "properties": { + "domain_name": { + "description": "The domain name to verify. When provided, the domain verification flow will skip the domain entry form and go directly to the verification step.", + "example": "example.com", + "type": "string" + } + }, + "type": "object" + }, + "EmailChange": { + "properties": { + "created_at": { + "description": "The timestamp when the email change challenge was created.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "expires_at": { + "description": "The timestamp when the email change code expires.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "new_email": { + "description": "The new email address the user is changing to.", + "example": "new.email@example.com", + "type": "string" + }, + "object": { + "const": "email_change", + "description": "Distinguishes the email change object.", + "type": "string" + }, + "user": { + "$ref": "#/components/schemas/UserlandUser" + } + }, + "required": [ + "object", + "user", + "new_email", + "expires_at", + "created_at" + ], + "type": "object" + }, + "EmailVerification": { + "properties": { + "code": { + "description": "The code used to verify the email.", + "example": "123456", + "type": "string" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "email": { + "description": "The email address of the user.", + "example": "marcelina.davis@example.com", + "type": "string" + }, + "expires_at": { + "description": "The timestamp when the email verification code expires.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "The unique ID of the email verification code.", + "example": "email_verification_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + }, + "object": { + "const": "email_verification", + "description": "Distinguishes the email verification object.", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "user_id": { + "description": "The unique ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + "required": [ + "object", + "id", + "user_id", + "email", + "expires_at", + "created_at", + "updated_at", + "code" + ], + "type": "object" + }, + "EnrollUserlandUserAuthenticationFactorDto": { + "properties": { + "totp_issuer": { + "description": "Your application or company name displayed in the user's authenticator app.", + "example": "WorkOS", + "type": "string" + }, + "totp_secret": { + "description": "The Base32-encoded shared secret for TOTP factors. This can be provided when creating the auth factor, otherwise it will be generated. The algorithm used to derive TOTP codes is SHA-1, the code length is 6 digits, and the timestep is 30 seconds \u2013 the secret must be compatible with these parameters.", + "example": "JBSWY3DPEHPK3PXP", + "type": "string" + }, + "totp_user": { + "description": "The user's account name displayed in their authenticator app.", + "example": "user@example.com", + "type": "string" + }, + "type": { + "const": "totp", + "description": "The type of the factor to enroll.", + "example": "totp", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + "Error": { + "description": "Error response body.", + "properties": { + "error": { + "description": "A human-readable description of the error.", + "example": "Invalid request parameters.", + "type": "string" + } + }, + "required": [ + "error" + ], + "title": "Error", + "type": "object" + }, + "EventContextActorDto": { + "description": "The actor who performed the action.", + "properties": { + "id": { + "description": "Unique identifier of the actor.", + "example": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "name": { + "description": "The name of the actor.", + "example": "Jane Doe", + "type": [ + "string", + "null" + ] + }, + "source": { + "description": "The source of the actor that performed the action.", + "enum": [ + "api", + "dashboard", + "admin_portal", + "system" + ], + "type": "string" + } + }, + "required": [ + "id", + "source", + "name" + ], + "type": "object" + }, + "EventContextDto": { + "description": "Additional context about the event.", + "properties": { + "actor": { + "$ref": "#/components/schemas/EventContextActorDto" + }, + "ajs_anonymous_id": { + "description": "The anonymous ID from analytics.", + "example": "ajs_anon_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "client_id": { + "description": "The client ID associated with the event.", + "example": "client_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "google_analytics_client_id": { + "description": "The Google Analytics client ID.", + "example": "GA1.2.1234567890.1234567890", + "type": "string" + }, + "google_analytics_sessions": { + "description": "The Google Analytics sessions associated with the event.", + "items": { + "properties": { + "containerId": { + "description": "The Google Analytics container ID.", + "example": "GTM-ABCDEF", + "type": "string" + }, + "sessionId": { + "description": "The Google Analytics session ID.", + "example": "1234567890", + "type": "string" + }, + "sessionNumber": { + "description": "The Google Analytics session number.", + "example": "1", + "type": "string" + } + }, + "required": [ + "containerId" + ], + "type": "object" + }, + "type": "array" + }, + "previous_attributes": { + "additionalProperties": {}, + "description": "Attributes that changed from their previous values.", + "type": "object" + } + }, + "type": "object" + }, + "EventList": { + "example": { + "data": [ + { + "context": {}, + "created_at": "2021-06-25T19:07:33.155Z", + "data": { + "created_at": "2021-06-25T19:07:33.155Z", + "custom_attributes": {}, + "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", + "email": "veda@foo-corp.com", + "emails": [ + { + "primary": true, + "type": "work", + "value": "veda@foo-corp.com" + } + ], + "first_name": "Veda", + "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", + "idp_id": "2836", + "last_name": "Torp", + "object": "directory_user", + "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", + "raw_attributes": {}, + "state": "active", + "updated_at": "2021-06-25T19:07:33.155Z", + "username": "veda@foo-corp.com" + }, + "event": "dsync.user.created", + "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "object": "event" + } + ], + "list_metadata": { + "after": "event_01EHZNVPK3SFK441A1RGBFSHRT" + }, + "object": "list" + }, + "properties": { + "data": { + "description": "The list of records for the current page.", + "items": { + "$ref": "#/components/schemas/EventSchema" + }, + "type": "array" + }, + "list_metadata": { + "description": "Pagination cursor for navigating to the next page of results.", + "properties": { + "after": { + "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": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "after" + ], + "type": "object" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "required": [ + "object", + "data", + "list_metadata" + ], + "type": "object" + }, + "EventSchema": { + "allOf": [ + { + "description": "An event emitted by WorkOS.", + "example": { + "context": {}, + "created_at": "2021-06-25T19:07:33.155Z", + "data": { + "created_at": "2021-06-25T19:07:33.155Z", + "custom_attributes": {}, + "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", + "email": "veda@foo-corp.com", + "emails": [ + { + "primary": true, + "type": "work", + "value": "veda@foo-corp.com" + } + ], + "first_name": "Veda", + "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", + "idp_id": "2836", + "last_name": "Torp", + "object": "directory_user", + "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", + "raw_attributes": {}, + "state": "active", + "updated_at": "2021-06-25T19:07:33.155Z", + "username": "veda@foo-corp.com" + }, + "event": "dsync.user.created", + "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "object": "event" + }, + "properties": { + "context": { + "additionalProperties": {}, + "description": "Additional context about the event.", + "type": "object" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "additionalProperties": {}, + "description": "The event payload.", + "example": { + "created_at": "2021-06-25T19:07:33.155Z", + "custom_attributes": {}, + "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", + "email": "veda@foo-corp.com", + "emails": [ + { + "primary": true, + "type": "work", + "value": "veda@foo-corp.com" + } + ], + "first_name": "Veda", + "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", + "idp_id": "2836", + "last_name": "Torp", + "object": "directory_user", + "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", + "raw_attributes": {}, + "state": "active", + "updated_at": "2021-06-25T19:07:33.155Z", + "username": "veda@foo-corp.com" + }, + "type": "object" + }, + "event": { + "description": "The type of event that occurred.", + "example": "dsync.user.created", + "type": "string" + }, + "id": { + "description": "Unique identifier for the Event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "object", + "id", + "event", + "data", + "created_at" + ], + "type": "object" + }, + { + "oneOf": [ + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "action_endpoint_id": { + "description": "The ID of the action endpoint.", + "example": "action_endpoint_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "action_execution_id": { + "description": "The ID of the action execution.", + "example": "action_execution_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "email": { + "description": "The email address of the user.", + "example": "user@example.com", + "type": "string" + }, + "ip_address": { + "description": "The IP address of the request.", + "example": "203.0.113.1", + "type": [ + "string", + "null" + ] + }, + "organization_id": { + "description": "The ID of the organization.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": [ + "string", + "null" + ] + }, + "type": { + "const": "authentication", + "description": "The type of action that was denied.", + "type": "string" + }, + "user_agent": { + "description": "The user agent of the request.", + "example": "Mozilla/5.0", + "type": [ + "string", + "null" + ] + }, + "user_id": { + "description": "The ID of the user.", + "example": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "verdict": { + "const": "Deny", + "description": "The verdict of the action.", + "type": "string" + } + }, + "required": [ + "action_endpoint_id", + "action_execution_id", + "type", + "verdict", + "user_id", + "organization_id", + "email", + "ip_address", + "user_agent" + ], + "type": "object" + }, + "event": { + "const": "action.authentication.denied", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "action_endpoint_id": { + "description": "The ID of the action endpoint.", + "example": "action_endpoint_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "action_execution_id": { + "description": "The ID of the action execution.", + "example": "action_execution_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "email": { + "description": "The email address of the user.", + "example": "user@example.com", + "type": "string" + }, + "ip_address": { + "description": "The IP address of the request.", + "example": "203.0.113.1", + "type": [ + "string", + "null" + ] + }, + "organization_id": { + "description": "The ID of the organization.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": [ + "string", + "null" + ] + }, + "type": { + "const": "user_registration", + "description": "The type of action that was denied.", + "type": "string" + }, + "user_agent": { + "description": "The user agent of the request.", + "example": "Mozilla/5.0", + "type": [ + "string", + "null" + ] + }, + "verdict": { + "const": "Deny", + "description": "The verdict of the action.", + "type": "string" + } + }, + "required": [ + "action_endpoint_id", + "action_execution_id", + "type", + "verdict", + "organization_id", + "email", + "ip_address", + "user_agent" + ], + "type": "object" + }, + "event": { + "const": "action.user_registration.denied", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "The timestamp when the API key was created.", + "example": "2026-01-15T12:00:00.000Z", + "type": "string" + }, + "expires_at": { + "description": "Timestamp when the API Key expires. Null means the key does not expire.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier of the API key.", + "example": "api_key_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "last_used_at": { + "description": "The timestamp when the API key was last used.", + "example": "2026-01-15T12:00:00.000Z", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The name of the API key.", + "example": "My API Key", + "type": "string" + }, + "obfuscated_value": { + "description": "The obfuscated value of the API key.", + "example": "sk_test_...1234", + "type": "string" + }, + "object": { + "const": "api_key", + "description": "Distinguishes the API key object.", + "type": "string" + }, + "owner": { + "description": "The owner of the API key.", + "oneOf": [ + { + "properties": { + "id": { + "description": "The unique identifier of the API key owner.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "type": { + "const": "organization", + "description": "The type of the API key owner.", + "type": "string" + } + }, + "required": [ + "type", + "id" + ], + "type": "object" + }, + { + "properties": { + "id": { + "description": "The unique identifier of the user who owns the API key.", + "example": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "organization_id": { + "description": "The unique identifier of the organization the API key belongs to.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "type": { + "const": "user", + "description": "The type of the API key owner.", + "type": "string" + } + }, + "required": [ + "type", + "id", + "organization_id" + ], + "type": "object" + } + ] + }, + "permissions": { + "description": "The permissions granted to the API key.", + "example": [ + "users:read", + "users:write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "updated_at": { + "description": "The timestamp when the API key was last updated.", + "example": "2026-01-15T12:00:00.000Z", + "type": "string" + } + }, + "required": [ + "object", + "id", + "owner", + "name", + "obfuscated_value", + "last_used_at", + "expires_at", + "permissions", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "api_key.created", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "The timestamp when the API key was created.", + "example": "2026-01-15T12:00:00.000Z", + "type": "string" + }, + "expires_at": { + "description": "Timestamp when the API Key expires. Null means the key does not expire.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier of the API key.", + "example": "api_key_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "last_used_at": { + "description": "The timestamp when the API key was last used.", + "example": "2026-01-15T12:00:00.000Z", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The name of the API key.", + "example": "My API Key", + "type": "string" + }, + "obfuscated_value": { + "description": "The obfuscated value of the API key.", + "example": "sk_test_...1234", + "type": "string" + }, + "object": { + "const": "api_key", + "description": "Distinguishes the API key object.", + "type": "string" + }, + "owner": { + "description": "The owner of the API key.", + "oneOf": [ + { + "properties": { + "id": { + "description": "The unique identifier of the API key owner.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "type": { + "const": "organization", + "description": "The type of the API key owner.", + "type": "string" + } + }, + "required": [ + "type", + "id" + ], + "type": "object" + }, + { + "properties": { + "id": { + "description": "The unique identifier of the user who owns the API key.", + "example": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "organization_id": { + "description": "The unique identifier of the organization the API key belongs to.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "type": { + "const": "user", + "description": "The type of the API key owner.", + "type": "string" + } + }, + "required": [ + "type", + "id", + "organization_id" + ], + "type": "object" + } + ] + }, + "permissions": { + "description": "The permissions granted to the API key.", + "example": [ + "users:read", + "users:write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "updated_at": { + "description": "The timestamp when the API key was last updated.", + "example": "2026-01-15T12:00:00.000Z", + "type": "string" + } + }, + "required": [ + "object", + "id", + "owner", + "name", + "obfuscated_value", + "last_used_at", + "expires_at", + "permissions", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "api_key.revoked", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "The timestamp when the API key was created.", + "example": "2026-01-15T12:00:00.000Z", + "type": "string" + }, + "expires_at": { + "description": "Timestamp when the API Key expires. Null means the key does not expire.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier of the API key.", + "example": "api_key_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "last_used_at": { + "description": "The timestamp when the API key was last used.", + "example": "2026-01-15T12:00:00.000Z", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The name of the API key.", + "example": "My API Key", + "type": "string" + }, + "obfuscated_value": { + "description": "The obfuscated value of the API key.", + "example": "sk_test_...1234", + "type": "string" + }, + "object": { + "const": "api_key", + "description": "Distinguishes the API key object.", + "type": "string" + }, + "owner": { + "description": "The owner of the API key.", + "oneOf": [ + { + "properties": { + "id": { + "description": "The unique identifier of the API key owner.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "type": { + "const": "organization", + "description": "The type of the API key owner.", + "type": "string" + } + }, + "required": [ + "type", + "id" + ], + "type": "object" + }, + { + "properties": { + "id": { + "description": "The unique identifier of the user who owns the API key.", + "example": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "organization_id": { + "description": "The unique identifier of the organization the API key belongs to.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "type": { + "const": "user", + "description": "The type of the API key owner.", + "type": "string" + } + }, + "required": [ + "type", + "id", + "organization_id" + ], + "type": "object" + } + ] + }, + "permissions": { + "description": "The permissions granted to the API key.", + "example": [ + "users:read", + "users:write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "previous_attributes": { + "description": "Previous API key attributes before the update.", + "properties": { + "expires_at": { + "description": "The previous timestamp when the API Key expired. Null means the key did not expire.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "expires_at" + ], + "type": "object" + }, + "updated_at": { + "description": "The timestamp when the API key was last updated.", + "example": "2026-01-15T12:00:00.000Z", + "type": "string" + } + }, + "required": [ + "object", + "id", + "owner", + "name", + "obfuscated_value", + "last_used_at", + "expires_at", + "permissions", + "created_at", + "updated_at", + "previous_attributes" + ], + "type": "object" + }, + "event": { + "const": "api_key.updated", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "email": { + "description": "The email address of the user.", + "example": "user@example.com", + "type": [ + "string", + "null" + ] + }, + "error": { + "description": "Details about the authentication error.", + "properties": { + "code": { + "description": "The error code.", + "example": "mfa_challenge_failed", + "type": "string" + }, + "message": { + "description": "A human-readable error message.", + "example": "The MFA challenge has failed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "ip_address": { + "description": "The IP address of the request.", + "example": "203.0.113.42", + "type": [ + "string", + "null" + ] + }, + "status": { + "const": "failed", + "type": "string" + }, + "type": { + "const": "email_verification", + "type": "string" + }, + "user_agent": { + "description": "The user agent of the request.", + "example": "Mozilla/5.0", + "type": [ + "string", + "null" + ] + }, + "user_id": { + "description": "The ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "type", + "status", + "ip_address", + "user_agent", + "user_id", + "email", + "error" + ], + "type": "object" + }, + "event": { + "const": "authentication.email_verification_failed", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "email": { + "description": "The email address of the user.", + "example": "user@example.com", + "type": "string" + }, + "ip_address": { + "description": "The IP address of the request.", + "example": "203.0.113.42", + "type": [ + "string", + "null" + ] + }, + "status": { + "const": "succeeded", + "type": "string" + }, + "type": { + "const": "email_verification", + "type": "string" + }, + "user_agent": { + "description": "The user agent of the request.", + "example": "Mozilla/5.0", + "type": [ + "string", + "null" + ] + }, + "user_id": { + "description": "The ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + "required": [ + "type", + "status", + "ip_address", + "user_agent", + "user_id", + "email" + ], + "type": "object" + }, + "event": { + "const": "authentication.email_verification_succeeded", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "email": { + "description": "The email address of the user.", + "example": "user@example.com", + "type": [ + "string", + "null" + ] + }, + "error": { + "description": "Details about the authentication error.", + "properties": { + "code": { + "description": "The error code.", + "example": "mfa_challenge_failed", + "type": "string" + }, + "message": { + "description": "A human-readable error message.", + "example": "The MFA challenge has failed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "ip_address": { + "description": "The IP address of the request.", + "example": "203.0.113.42", + "type": [ + "string", + "null" + ] + }, + "status": { + "const": "failed", + "type": "string" + }, + "type": { + "const": "magic_auth", + "type": "string" + }, + "user_agent": { + "description": "The user agent of the request.", + "example": "Mozilla/5.0", + "type": [ + "string", + "null" + ] + }, + "user_id": { + "description": "The ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "type", + "status", + "ip_address", + "user_agent", + "user_id", + "email", + "error" + ], + "type": "object" + }, + "event": { + "const": "authentication.magic_auth_failed", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "email": { + "description": "The email address of the user.", + "example": "user@example.com", + "type": "string" + }, + "ip_address": { + "description": "The IP address of the request.", + "example": "203.0.113.42", + "type": [ + "string", + "null" + ] + }, + "status": { + "const": "succeeded", + "type": "string" + }, + "type": { + "const": "magic_auth", + "type": "string" + }, + "user_agent": { + "description": "The user agent of the request.", + "example": "Mozilla/5.0", + "type": [ + "string", + "null" + ] + }, + "user_id": { + "description": "The ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + "required": [ + "type", + "status", + "ip_address", + "user_agent", + "user_id", + "email" + ], + "type": "object" + }, + "event": { + "const": "authentication.magic_auth_succeeded", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "email": { + "description": "The email address of the user.", + "example": "user@example.com", + "type": [ + "string", + "null" + ] + }, + "error": { + "description": "Details about the authentication error.", + "properties": { + "code": { + "description": "The error code.", + "example": "mfa_challenge_failed", + "type": "string" + }, + "message": { + "description": "A human-readable error message.", + "example": "The MFA challenge has failed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "ip_address": { + "description": "The IP address of the request.", + "example": "203.0.113.42", + "type": [ + "string", + "null" + ] + }, + "status": { + "const": "failed", + "type": "string" + }, + "type": { + "const": "mfa", + "type": "string" + }, + "user_agent": { + "description": "The user agent of the request.", + "example": "Mozilla/5.0", + "type": [ + "string", + "null" + ] + }, + "user_id": { + "description": "The ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "type", + "status", + "ip_address", + "user_agent", + "user_id", + "email", + "error" + ], + "type": "object" + }, + "event": { + "const": "authentication.mfa_failed", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "email": { + "description": "The email address of the user.", + "example": "user@example.com", + "type": "string" + }, + "ip_address": { + "description": "The IP address of the request.", + "example": "203.0.113.42", + "type": [ + "string", + "null" + ] + }, + "status": { + "const": "succeeded", + "type": "string" + }, + "type": { + "const": "mfa", + "type": "string" + }, + "user_agent": { + "description": "The user agent of the request.", + "example": "Mozilla/5.0", + "type": [ + "string", + "null" + ] + }, + "user_id": { + "description": "The ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + "required": [ + "type", + "status", + "ip_address", + "user_agent", + "user_id", + "email" + ], + "type": "object" + }, + "event": { + "const": "authentication.mfa_succeeded", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "email": { + "description": "The email address of the user.", + "example": "user@example.com", + "type": [ + "string", + "null" + ] + }, + "error": { + "description": "Details about the authentication error.", + "properties": { + "code": { + "description": "The error code.", + "example": "mfa_challenge_failed", + "type": "string" + }, + "message": { + "description": "A human-readable error message.", + "example": "The MFA challenge has failed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "ip_address": { + "description": "The IP address of the request.", + "example": "203.0.113.42", + "type": [ + "string", + "null" + ] + }, + "status": { + "const": "failed", + "type": "string" + }, + "type": { + "const": "oauth", + "type": "string" + }, + "user_agent": { + "description": "The user agent of the request.", + "example": "Mozilla/5.0", + "type": [ + "string", + "null" + ] + }, + "user_id": { + "description": "The ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "type", + "status", + "ip_address", + "user_agent", + "user_id", + "email", + "error" + ], + "type": "object" + }, + "event": { + "const": "authentication.oauth_failed", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "email": { + "description": "The email address of the user.", + "example": "user@example.com", + "type": "string" + }, + "ip_address": { + "description": "The IP address of the request.", + "example": "203.0.113.42", + "type": [ + "string", + "null" + ] + }, + "status": { + "const": "succeeded", + "type": "string" + }, + "type": { + "const": "oauth", + "type": "string" + }, + "user_agent": { + "description": "The user agent of the request.", + "example": "Mozilla/5.0", + "type": [ + "string", + "null" + ] + }, + "user_id": { + "description": "The ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "type", + "status", + "ip_address", + "user_agent", + "user_id", + "email" + ], + "type": "object" + }, + "event": { + "const": "authentication.oauth_succeeded", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "email": { + "description": "The email address of the user.", + "example": "user@example.com", + "type": [ + "string", + "null" + ] + }, + "error": { + "description": "Details about the authentication error.", + "properties": { + "code": { + "description": "The error code.", + "example": "mfa_challenge_failed", + "type": "string" + }, + "message": { + "description": "A human-readable error message.", + "example": "The MFA challenge has failed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "ip_address": { + "description": "The IP address of the request.", + "example": "203.0.113.42", + "type": [ + "string", + "null" + ] + }, + "status": { + "const": "failed", + "type": "string" + }, + "type": { + "const": "passkey", + "type": "string" + }, + "user_agent": { + "description": "The user agent of the request.", + "example": "Mozilla/5.0", + "type": [ + "string", + "null" + ] + }, + "user_id": { + "description": "The ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "type", + "status", + "ip_address", + "user_agent", + "user_id", + "email", + "error" + ], + "type": "object" + }, + "event": { + "const": "authentication.passkey_failed", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "email": { + "description": "The email address of the user.", + "example": "user@example.com", + "type": "string" + }, + "ip_address": { + "description": "The IP address of the request.", + "example": "203.0.113.42", + "type": [ + "string", + "null" + ] + }, + "status": { + "const": "succeeded", + "type": "string" + }, + "type": { + "const": "passkey", + "type": "string" + }, + "user_agent": { + "description": "The user agent of the request.", + "example": "Mozilla/5.0", + "type": [ + "string", + "null" + ] + }, + "user_id": { + "description": "The ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + "required": [ + "type", + "status", + "ip_address", + "user_agent", + "user_id", + "email" + ], + "type": "object" + }, + "event": { + "const": "authentication.passkey_succeeded", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "email": { + "description": "The email address of the user.", + "example": "user@example.com", + "type": [ + "string", + "null" + ] + }, + "error": { + "description": "Details about the authentication error.", + "properties": { + "code": { + "description": "The error code.", + "example": "mfa_challenge_failed", + "type": "string" + }, + "message": { + "description": "A human-readable error message.", + "example": "The MFA challenge has failed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "ip_address": { + "description": "The IP address of the request.", + "example": "203.0.113.42", + "type": [ + "string", + "null" + ] + }, + "status": { + "const": "failed", + "type": "string" + }, + "type": { + "const": "password", + "type": "string" + }, + "user_agent": { + "description": "The user agent of the request.", + "example": "Mozilla/5.0", + "type": [ + "string", + "null" + ] + }, + "user_id": { + "description": "The ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "type", + "status", + "ip_address", + "user_agent", + "user_id", + "email", + "error" + ], + "type": "object" + }, + "event": { + "const": "authentication.password_failed", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "email": { + "description": "The email address of the user.", + "example": "user@example.com", + "type": "string" + }, + "ip_address": { + "description": "The IP address of the request.", + "example": "203.0.113.42", + "type": [ + "string", + "null" + ] + }, + "status": { + "const": "succeeded", + "type": "string" + }, + "type": { + "const": "password", + "type": "string" + }, + "user_agent": { + "description": "The user agent of the request.", + "example": "Mozilla/5.0", + "type": [ + "string", + "null" + ] + }, + "user_id": { + "description": "The ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + "required": [ + "type", + "status", + "ip_address", + "user_agent", + "user_id", + "email" + ], + "type": "object" + }, + "event": { + "const": "authentication.password_succeeded", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "action": { + "enum": [ + "signup", + "login" + ], + "type": "string" + }, + "auth_method": { + "description": "The authentication method used.", + "example": "password", + "type": "string" + }, + "blocklist_type": { + "description": "The type of blocklist that triggered the risk detection.", + "example": "ip", + "type": [ + "string", + "null" + ] + }, + "control": { + "description": "The control action taken for the detected risk.", + "example": "block", + "type": [ + "string", + "null" + ] + }, + "email": { + "description": "The email address of the user.", + "example": "user@example.com", + "type": "string" + }, + "ip_address": { + "description": "The IP address of the request.", + "example": "203.0.113.42", + "type": [ + "string", + "null" + ] + }, + "user_agent": { + "description": "The user agent of the request.", + "example": "Mozilla/5.0", + "type": [ + "string", + "null" + ] + }, + "user_id": { + "description": "The ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + "required": [ + "auth_method", + "action", + "control", + "blocklist_type", + "ip_address", + "user_agent", + "user_id", + "email" + ], + "type": "object" + }, + "event": { + "const": "authentication.radar_risk_detected", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "email": { + "description": "The email address of the user.", + "example": "user@example.com", + "type": [ + "string", + "null" + ] + }, + "error": { + "description": "Details about the authentication error.", + "properties": { + "code": { + "description": "The error code.", + "example": "mfa_challenge_failed", + "type": "string" + }, + "message": { + "description": "A human-readable error message.", + "example": "The MFA challenge has failed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "ip_address": { + "description": "The IP address of the request.", + "example": "203.0.113.42", + "type": [ + "string", + "null" + ] + }, + "sso": { + "description": "SSO connection details.", + "properties": { + "connection_id": { + "description": "The ID of the SSO connection.", + "example": "conn_01E4ZCR3C56J083X43JQXF3JK5", + "type": [ + "string", + "null" + ] + }, + "organization_id": { + "description": "The ID of the organization.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": [ + "string", + "null" + ] + }, + "session_id": { + "description": "The ID of the SSO session.", + "example": "sess_01E4ZCR3C56J083X43JQXF3JK5", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "organization_id", + "connection_id", + "session_id" + ], + "type": "object" + }, + "status": { + "const": "failed", + "type": "string" + }, + "type": { + "const": "sso", + "type": "string" + }, + "user_agent": { + "description": "The user agent of the request.", + "example": "Mozilla/5.0", + "type": [ + "string", + "null" + ] + }, + "user_id": { + "description": "The ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "type", + "status", + "ip_address", + "user_agent", + "user_id", + "email", + "sso", + "error" + ], + "type": "object" + }, + "event": { + "const": "authentication.sso_failed", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "email": { + "description": "The email address of the user.", + "example": "user@example.com", + "type": [ + "string", + "null" + ] + }, + "ip_address": { + "description": "The IP address of the request.", + "example": "203.0.113.42", + "type": [ + "string", + "null" + ] + }, + "sso": { + "description": "SSO connection details.", + "properties": { + "connection_id": { + "description": "The ID of the SSO connection.", + "example": "conn_01E4ZCR3C56J083X43JQXF3JK5", + "type": [ + "string", + "null" + ] + }, + "organization_id": { + "description": "The ID of the organization.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": [ + "string", + "null" + ] + }, + "session_id": { + "description": "The ID of the SSO session.", + "example": "sess_01E4ZCR3C56J083X43JQXF3JK5", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "organization_id", + "connection_id", + "session_id" + ], + "type": "object" + }, + "status": { + "const": "started", + "type": "string" + }, + "type": { + "const": "sso", + "type": "string" + }, + "user_agent": { + "description": "The user agent of the request.", + "example": "Mozilla/5.0", + "type": [ + "string", + "null" + ] + }, + "user_id": { + "description": "The ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "type", + "status", + "ip_address", + "user_agent", + "user_id", + "email", + "sso" + ], + "type": "object" + }, + "event": { + "const": "authentication.sso_started", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "email": { + "description": "The email address of the user.", + "example": "user@example.com", + "type": "string" + }, + "ip_address": { + "description": "The IP address of the request.", + "example": "203.0.113.42", + "type": [ + "string", + "null" + ] + }, + "sso": { + "description": "SSO connection details.", + "properties": { + "connection_id": { + "description": "The ID of the SSO connection.", + "example": "conn_01E4ZCR3C56J083X43JQXF3JK5", + "type": [ + "string", + "null" + ] + }, + "organization_id": { + "description": "The ID of the organization.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": [ + "string", + "null" + ] + }, + "session_id": { + "description": "The ID of the SSO session.", + "example": "sess_01E4ZCR3C56J083X43JQXF3JK5", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "organization_id", + "connection_id", + "session_id" + ], + "type": "object" + }, + "status": { + "const": "succeeded", + "type": "string" + }, + "type": { + "const": "sso", + "type": "string" + }, + "user_agent": { + "description": "The user agent of the request.", + "example": "Mozilla/5.0", + "type": [ + "string", + "null" + ] + }, + "user_id": { + "description": "The ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "type", + "status", + "ip_address", + "user_agent", + "user_id", + "email", + "sso" + ], + "type": "object" + }, + "event": { + "const": "authentication.sso_succeeded", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "email": { + "description": "The email address of the user.", + "example": "user@example.com", + "type": [ + "string", + "null" + ] + }, + "error": { + "description": "Details about the authentication error.", + "properties": { + "code": { + "description": "The error code.", + "example": "mfa_challenge_failed", + "type": "string" + }, + "message": { + "description": "A human-readable error message.", + "example": "The MFA challenge has failed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "ip_address": { + "description": "The IP address of the request.", + "example": "203.0.113.42", + "type": [ + "string", + "null" + ] + }, + "sso": { + "description": "SSO connection details.", + "properties": { + "connection_id": { + "description": "The ID of the SSO connection.", + "example": "conn_01E4ZCR3C56J083X43JQXF3JK5", + "type": [ + "string", + "null" + ] + }, + "organization_id": { + "description": "The ID of the organization.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": [ + "string", + "null" + ] + }, + "session_id": { + "description": "The ID of the SSO session.", + "example": "sess_01E4ZCR3C56J083X43JQXF3JK5", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "organization_id", + "connection_id", + "session_id" + ], + "type": "object" + }, + "status": { + "const": "timed_out", + "type": "string" + }, + "type": { + "const": "sso", + "type": "string" + }, + "user_agent": { + "description": "The user agent of the request.", + "example": "Mozilla/5.0", + "type": [ + "string", + "null" + ] + }, + "user_id": { + "description": "The ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "type", + "status", + "ip_address", + "user_agent", + "user_id", + "email", + "sso", + "error" + ], + "type": "object" + }, + "event": { + "const": "authentication.sso_timed_out", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "connection_type": { + "description": "The type of the connection.", + "enum": [ + "ADFSSAML", + "AdpOidc", + "AppleOAuth", + "Auth0Migration", + "Auth0SAML", + "AzureSAML", + "BitbucketOAuth", + "CasSAML", + "ClassLinkSAML", + "CleverOIDC", + "CloudflareSAML", + "CyberArkSAML", + "DiscordOAuth", + "DuoSAML", + "EntraIdOIDC", + "GenericOIDC", + "GenericSAML", + "GitHubOAuth", + "GitLabOAuth", + "GoogleOAuth", + "GoogleOIDC", + "GoogleSAML", + "IntuitOAuth", + "JumpCloudSAML", + "KeycloakSAML", + "LastPassSAML", + "LinkedInOAuth", + "LoginGovOidc", + "MagicLink", + "MicrosoftOAuth", + "MiniOrangeSAML", + "NetIqSAML", + "OktaOIDC", + "OktaSAML", + "OneLoginSAML", + "OracleSAML", + "PingFederateSAML", + "PingOneSAML", + "RipplingSAML", + "SalesforceSAML", + "ShibbolethGenericSAML", + "ShibbolethSAML", + "SimpleSamlPhpSAML", + "SalesforceOAuth", + "SlackOAuth", + "TestIdp", + "VercelMarketplaceOAuth", + "VercelOAuth", + "VMwareSAML", + "XeroOAuth" + ], + "example": "OktaSAML", + "type": "string" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "domains": { + "description": "The domains associated with the connection.", + "items": { + "properties": { + "domain": { + "description": "The domain value.", + "example": "acme.com", + "type": "string" + }, + "id": { + "description": "Unique identifier of the connection domain.", + "example": "conn_domain_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "object": { + "const": "connection_domain", + "description": "Distinguishes the connection domain object.", + "type": "string" + } + }, + "required": [ + "object", + "id", + "domain" + ], + "type": "object" + }, + "type": "array" + }, + "external_key": { + "description": "The external key of the connection.", + "example": "ext_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "id": { + "description": "Unique identifier of the connection.", + "example": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "name": { + "description": "The name of the connection.", + "example": "Acme SSO", + "type": "string" + }, + "object": { + "const": "connection", + "description": "Distinguishes the connection object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization the connection belongs to.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "state": { + "description": "The current state of the connection.", + "enum": [ + "draft", + "active", + "validating", + "inactive", + "deleting" + ], + "example": "active", + "type": "string" + }, + "status": { + "description": "Deprecated. Use state instead.", + "enum": [ + "linked", + "unlinked" + ], + "example": "linked", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "state", + "name", + "connection_type", + "created_at", + "updated_at", + "external_key", + "status", + "domains" + ], + "type": "object" + }, + "event": { + "const": "connection.activated", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "connection_type": { + "description": "The type of the connection.", + "enum": [ + "ADFSSAML", + "AdpOidc", + "AppleOAuth", + "Auth0Migration", + "Auth0SAML", + "AzureSAML", + "BitbucketOAuth", + "CasSAML", + "ClassLinkSAML", + "CleverOIDC", + "CloudflareSAML", + "CyberArkSAML", + "DiscordOAuth", + "DuoSAML", + "EntraIdOIDC", + "GenericOIDC", + "GenericSAML", + "GitHubOAuth", + "GitLabOAuth", + "GoogleOAuth", + "GoogleOIDC", + "GoogleSAML", + "IntuitOAuth", + "JumpCloudSAML", + "KeycloakSAML", + "LastPassSAML", + "LinkedInOAuth", + "LoginGovOidc", + "MagicLink", + "MicrosoftOAuth", + "MiniOrangeSAML", + "NetIqSAML", + "OktaOIDC", + "OktaSAML", + "OneLoginSAML", + "OracleSAML", + "PingFederateSAML", + "PingOneSAML", + "RipplingSAML", + "SalesforceSAML", + "ShibbolethGenericSAML", + "ShibbolethSAML", + "SimpleSamlPhpSAML", + "SalesforceOAuth", + "SlackOAuth", + "TestIdp", + "VercelMarketplaceOAuth", + "VercelOAuth", + "VMwareSAML", + "XeroOAuth" + ], + "example": "OktaSAML", + "type": "string" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "domains": { + "description": "The domains associated with the connection.", + "items": { + "properties": { + "domain": { + "description": "The domain value.", + "example": "acme.com", + "type": "string" + }, + "id": { + "description": "Unique identifier of the connection domain.", + "example": "conn_domain_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "object": { + "const": "connection_domain", + "description": "Distinguishes the connection domain object.", + "type": "string" + } + }, + "required": [ + "object", + "id", + "domain" + ], + "type": "object" + }, + "type": "array" + }, + "external_key": { + "description": "The external key of the connection.", + "example": "ext_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "id": { + "description": "Unique identifier of the connection.", + "example": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "name": { + "description": "The name of the connection.", + "example": "Acme SSO", + "type": "string" + }, + "object": { + "const": "connection", + "description": "Distinguishes the connection object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization the connection belongs to.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "state": { + "description": "The current state of the connection.", + "enum": [ + "draft", + "active", + "validating", + "inactive", + "deleting" + ], + "example": "active", + "type": "string" + }, + "status": { + "description": "Deprecated. Use state instead.", + "enum": [ + "linked", + "unlinked" + ], + "example": "linked", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "state", + "name", + "connection_type", + "created_at", + "updated_at", + "external_key", + "status", + "domains" + ], + "type": "object" + }, + "event": { + "const": "connection.deactivated", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "connection_type": { + "description": "The type of the connection.", + "enum": [ + "ADFSSAML", + "AdpOidc", + "AppleOAuth", + "Auth0Migration", + "Auth0SAML", + "AzureSAML", + "BitbucketOAuth", + "CasSAML", + "ClassLinkSAML", + "CleverOIDC", + "CloudflareSAML", + "CyberArkSAML", + "DiscordOAuth", + "DuoSAML", + "EntraIdOIDC", + "GenericOIDC", + "GenericSAML", + "GitHubOAuth", + "GitLabOAuth", + "GoogleOAuth", + "GoogleOIDC", + "GoogleSAML", + "IntuitOAuth", + "JumpCloudSAML", + "KeycloakSAML", + "LastPassSAML", + "LinkedInOAuth", + "LoginGovOidc", + "MagicLink", + "MicrosoftOAuth", + "MiniOrangeSAML", + "NetIqSAML", + "OktaOIDC", + "OktaSAML", + "OneLoginSAML", + "OracleSAML", + "PingFederateSAML", + "PingOneSAML", + "RipplingSAML", + "SalesforceSAML", + "ShibbolethGenericSAML", + "ShibbolethSAML", + "SimpleSamlPhpSAML", + "SalesforceOAuth", + "SlackOAuth", + "TestIdp", + "VercelMarketplaceOAuth", + "VercelOAuth", + "VMwareSAML", + "XeroOAuth" + ], + "example": "OktaSAML", + "type": "string" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "Unique identifier of the connection.", + "example": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "name": { + "description": "The name of the connection.", + "example": "Acme SSO", + "type": "string" + }, + "object": { + "const": "connection", + "description": "Distinguishes the connection object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization the connection belongs to.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "state": { + "description": "The current state of the connection.", + "enum": [ + "draft", + "active", + "validating", + "inactive", + "deleting" + ], + "example": "active", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "state", + "name", + "connection_type", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "connection.deleted", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "certificate": { + "description": "The SAML certificate details.", + "properties": { + "certificate_type": { + "description": "The type of the SAML certificate.", + "enum": [ + "ResponseSigning", + "RequestSigning", + "ResponseEncryption" + ], + "example": "ResponseSigning", + "type": "string" + }, + "expiry_date": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "is_expired": { + "description": "Whether the certificate has already expired.", + "example": false, + "type": "boolean" + } + }, + "required": [ + "certificate_type", + "expiry_date", + "is_expired" + ], + "type": "object" + }, + "connection": { + "description": "The connection with the expiring certificate.", + "properties": { + "id": { + "description": "Unique identifier of the connection.", + "example": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization the connection belongs to.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "days_until_expiry": { + "description": "The number of days until the certificate expires.", + "example": 30, + "type": "integer" + } + }, + "required": [ + "connection", + "certificate", + "days_until_expiry" + ], + "type": "object" + }, + "event": { + "const": "connection.saml_certificate_renewal_required", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "certificate": { + "description": "The renewed SAML certificate details.", + "properties": { + "certificate_type": { + "description": "The type of the SAML certificate.", + "enum": [ + "ResponseSigning", + "RequestSigning", + "ResponseEncryption" + ], + "example": "ResponseSigning", + "type": "string" + }, + "expiry_date": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "certificate_type", + "expiry_date" + ], + "type": "object" + }, + "connection": { + "description": "The connection with the renewed certificate.", + "properties": { + "id": { + "description": "Unique identifier of the connection.", + "example": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization the connection belongs to.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "renewed_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "connection", + "certificate", + "renewed_at" + ], + "type": "object" + }, + "event": { + "const": "connection.saml_certificate_renewed", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "domains": { + "description": "The domains associated with the directory.", + "items": { + "properties": { + "domain": { + "description": "The domain value.", + "example": "acme.com", + "type": "string" + }, + "id": { + "description": "Unique identifier of the organization domain.", + "example": "org_domain_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "object": { + "const": "organization_domain", + "description": "Distinguishes the organization domain object.", + "type": "string" + } + }, + "required": [ + "object", + "id", + "domain" + ], + "type": "object" + }, + "type": "array" + }, + "external_key": { + "description": "The external key of the directory.", + "example": "ext_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "id": { + "description": "Unique identifier of the directory.", + "example": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "name": { + "description": "The name of the directory.", + "example": "Acme Directory", + "type": "string" + }, + "object": { + "const": "directory", + "description": "Distinguishes the directory object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization the directory belongs to.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "state": { + "description": "The current state of the directory.", + "enum": [ + "active", + "validating", + "invalid_credentials", + "inactive", + "deleting" + ], + "example": "active", + "type": "string" + }, + "type": { + "description": "The type of the directory.", + "enum": [ + "azure scim v2.0", + "bamboohr", + "breathe hr", + "cezanne hr", + "cyberark scim v2.0", + "fourth hr", + "generic scim v2.0", + "gsuite directory", + "gusto", + "hibob", + "jump cloud scim v2.0", + "okta scim v2.0", + "onelogin scim v2.0", + "people hr", + "personio", + "pingfederate scim v2.0", + "rippling scim v2.0", + "rippling", + "sailpoint scim v2.0", + "s3", + "sftp", + "sftp workday", + "workday" + ], + "example": "okta scim v2.0", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "type", + "state", + "name", + "created_at", + "updated_at", + "external_key", + "domains" + ], + "type": "object" + }, + "event": { + "const": "dsync.activated", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "Unique identifier of the directory.", + "example": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "name": { + "description": "The name of the directory.", + "example": "Acme Directory", + "type": "string" + }, + "object": { + "const": "directory", + "description": "Distinguishes the directory object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization the directory belongs to.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "state": { + "description": "The current state of the directory.", + "enum": [ + "active", + "validating", + "invalid_credentials", + "inactive", + "deleting" + ], + "example": "active", + "type": "string" + }, + "type": { + "description": "The type of the directory.", + "enum": [ + "azure scim v2.0", + "bamboohr", + "breathe hr", + "cezanne hr", + "cyberark scim v2.0", + "fourth hr", + "generic scim v2.0", + "gsuite directory", + "gusto", + "hibob", + "jump cloud scim v2.0", + "okta scim v2.0", + "onelogin scim v2.0", + "people hr", + "personio", + "pingfederate scim v2.0", + "rippling scim v2.0", + "rippling", + "sailpoint scim v2.0", + "s3", + "sftp", + "sftp workday", + "workday" + ], + "example": "okta scim v2.0", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "type", + "state", + "name", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "dsync.deleted", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/DirectoryGroup", + "description": "The event payload." + }, + "event": { + "const": "dsync.group.created", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/DirectoryGroup", + "description": "The event payload." + }, + "event": { + "const": "dsync.group.deleted", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "directory_id": { + "description": "The identifier of the Directory the Directory Group belongs to.", + "example": "directory_01ECAZ4NV9QMV47GW873HDCX74", + "type": "string" + }, + "id": { + "description": "Unique identifier for the Directory Group.", + "example": "directory_group_01E1JJS84MFPPQ3G655FHTKX6Z", + "type": "string" + }, + "idp_id": { + "description": "Unique identifier for the group, assigned by the Directory Provider. Different Directory Providers use different ID formats.", + "example": "02grqrue4294w24", + "type": "string" + }, + "name": { + "description": "The name of the Directory Group.", + "example": "Developers", + "type": "string" + }, + "object": { + "const": "directory_group", + "description": "Distinguishes the Directory Group object.", + "type": "string" + }, + "organization_id": { + "description": "The identifier for the Organization in which the Directory resides.", + "example": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", + "type": "string" + }, + "previous_attributes": { + "additionalProperties": {}, + "type": "object" + }, + "raw_attributes": { + "additionalProperties": {}, + "description": "The raw attributes received from the directory provider.", + "type": "object" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "idp_id", + "directory_id", + "organization_id", + "name", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "dsync.group.updated", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "directory_id": { + "description": "The ID of the directory the token authenticates to.", + "example": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "id": { + "description": "Unique identifier of the directory token.", + "example": "directory_token_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "object": { + "const": "directory_token", + "description": "Distinguishes the directory token object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization the directory belongs to.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "token_suffix": { + "description": "The trailing characters of the bearer token, for identification only. The full token value is never included in events.", + "example": "a1b2", + "type": "string" + } + }, + "required": [ + "object", + "id", + "directory_id", + "token_suffix", + "created_at" + ], + "type": "object" + }, + "event": { + "const": "dsync.token.created", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "directory_id": { + "description": "The ID of the directory the token authenticates to.", + "example": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "id": { + "description": "Unique identifier of the directory token.", + "example": "directory_token_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "object": { + "const": "directory_token", + "description": "Distinguishes the directory token object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization the directory belongs to.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "token_suffix": { + "description": "The trailing characters of the bearer token, for identification only. The full token value is never included in events.", + "example": "a1b2", + "type": "string" + } + }, + "required": [ + "object", + "id", + "directory_id", + "token_suffix", + "created_at" + ], + "type": "object" + }, + "event": { + "const": "dsync.token.revoked", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "directory_id": { + "description": "The ID of the directory.", + "example": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "group": { + "$ref": "#/components/schemas/DirectoryGroup", + "description": "The directory group the user was added to." + }, + "user": { + "$ref": "#/components/schemas/DirectoryUser", + "description": "The directory user added to the group." + } + }, + "required": [ + "directory_id", + "user", + "group" + ], + "type": "object" + }, + "event": { + "const": "dsync.group.user_added", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/DirectoryUser", + "description": "The event payload." + }, + "event": { + "const": "dsync.user.created", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/DirectoryUser", + "description": "The event payload." + }, + "event": { + "const": "dsync.user.deleted", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "directory_id": { + "description": "The ID of the directory.", + "example": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "group": { + "$ref": "#/components/schemas/DirectoryGroup", + "description": "The directory group the user was removed from." + }, + "user": { + "$ref": "#/components/schemas/DirectoryUser", + "description": "The directory user removed from the group." + } + }, + "required": [ + "directory_id", + "user", + "group" + ], + "type": "object" + }, + "event": { + "const": "dsync.group.user_removed", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "custom_attributes": { + "additionalProperties": {}, + "description": "An object containing the custom attribute mapping for the Directory Provider.", + "example": { + "department": "Engineering", + "job_title": "Software Engineer" + }, + "type": "object" + }, + "directory_id": { + "description": "The identifier of the Directory the Directory User belongs to.", + "example": "directory_01ECAZ4NV9QMV47GW873HDCX74", + "type": "string" + }, + "email": { + "description": "The email address of the user.", + "example": "marcelina.davis@example.com", + "type": [ + "string", + "null" + ] + }, + "emails": { + "deprecated": true, + "description": "A list of email addresses for the user.", + "items": { + "properties": { + "primary": { + "description": "Whether this is the primary email address.", + "example": true, + "type": "boolean" + }, + "type": { + "description": "The type of email address.", + "example": "work", + "type": "string" + }, + "value": { + "description": "The email address value.", + "example": "marcelina.davis@example.com", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "first_name": { + "description": "The first name of the user.", + "example": "Marcelina", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier for the Directory User.", + "example": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", + "type": "string" + }, + "idp_id": { + "description": "Unique identifier for the user, assigned by the Directory Provider. Different Directory Providers use different ID formats.", + "example": "2836", + "type": "string" + }, + "job_title": { + "deprecated": true, + "description": "The job title of the user.", + "example": "Software Engineer", + "type": [ + "string", + "null" + ] + }, + "last_name": { + "description": "The last name of the user.", + "example": "Davis", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The full name of the user.", + "example": "Marcelina Davis", + "type": [ + "string", + "null" + ] + }, + "object": { + "const": "directory_user", + "description": "Distinguishes the Directory User object.", + "type": "string" + }, + "organization_id": { + "description": "The identifier for the Organization in which the Directory resides.", + "example": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", + "type": "string" + }, + "previous_attributes": { + "additionalProperties": {}, + "type": "object" + }, + "raw_attributes": { + "additionalProperties": {}, + "deprecated": true, + "description": "The raw attributes received from the directory provider.", + "type": "object" + }, + "role": { + "$ref": "#/components/schemas/SlimRole" + }, + "roles": { + "description": "All roles assigned to the user.", + "items": { + "$ref": "#/components/schemas/SlimRole" + }, + "type": "array" + }, + "state": { + "description": "The state of the user.", + "enum": [ + "active", + "suspended", + "inactive" + ], + "example": "active", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "username": { + "deprecated": true, + "description": "The username of the user.", + "example": "mdavis", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "object", + "id", + "directory_id", + "organization_id", + "idp_id", + "email", + "state", + "raw_attributes", + "custom_attributes", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "dsync.user.updated", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "email": { + "description": "The email address of the user.", + "example": "marcelina.davis@example.com", + "type": "string" + }, + "expires_at": { + "description": "The timestamp when the email verification code expires.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "The unique ID of the email verification code.", + "example": "email_verification_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + }, + "object": { + "const": "email_verification", + "description": "Distinguishes the email verification object.", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "user_id": { + "description": "The unique ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + "required": [ + "object", + "id", + "user_id", + "email", + "expires_at", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "email_verification.created", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "description": "Additional context about the event.", + "properties": { + "actor": { + "description": "The actor who performed the action.", + "properties": { + "id": { + "description": "Unique identifier of the actor.", + "example": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "name": { + "description": "The name of the actor.", + "example": "Jane Doe", + "type": [ + "string", + "null" + ] + }, + "source": { + "description": "The source of the actor that performed the action.", + "enum": [ + "api", + "dashboard", + "admin_portal", + "system" + ], + "type": "string" + } + }, + "required": [ + "id", + "source", + "name" + ], + "type": "object" + }, + "client_id": { + "description": "The client ID associated with the flag event.", + "example": "client_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + } + }, + "required": [ + "client_id", + "actor" + ], + "type": "object" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "default_value": { + "description": "The value returned for users and organizations who don't match any configured targeting rules.", + "example": false, + "type": "boolean" + }, + "description": { + "description": "A description for the Feature Flag.", + "example": "Enable advanced analytics dashboard feature", + "type": [ + "string", + "null" + ] + }, + "enabled": { + "description": "Specifies whether the Feature Flag is active for the current environment.", + "example": true, + "type": "boolean" + }, + "environment_id": { + "description": "The ID of the environment the Feature Flag belongs to.", + "example": "environment_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "id": { + "description": "Unique identifier of the Feature Flag.", + "example": "flag_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "name": { + "description": "A descriptive name for the Feature Flag.", + "example": "Advanced Analytics", + "type": "string" + }, + "object": { + "const": "feature_flag", + "type": "string" + }, + "owner": { + "description": "The owner of the Feature Flag.", + "oneOf": [ + { + "properties": { + "email": { + "description": "The email address of the flag owner.", + "example": "jane@example.com", + "type": "string" + }, + "first_name": { + "description": "The first name of the flag owner.", + "example": "Jane", + "type": [ + "string", + "null" + ] + }, + "last_name": { + "description": "The last name of the flag owner.", + "example": "Doe", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "first_name", + "last_name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "slug": { + "description": "A unique key to reference the Feature Flag.", + "example": "advanced-analytics", + "type": "string" + }, + "tags": { + "description": "Labels assigned to the Feature Flag for categorizing and filtering.", + "example": [ + "reports" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "environment_id", + "slug", + "name", + "description", + "owner", + "tags", + "enabled", + "default_value", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "flag.created", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "context", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "description": "Additional context about the event.", + "properties": { + "actor": { + "description": "The actor who performed the action.", + "properties": { + "id": { + "description": "Unique identifier of the actor.", + "example": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "name": { + "description": "The name of the actor.", + "example": "Jane Doe", + "type": [ + "string", + "null" + ] + }, + "source": { + "description": "The source of the actor that performed the action.", + "enum": [ + "api", + "dashboard", + "admin_portal", + "system" + ], + "type": "string" + } + }, + "required": [ + "id", + "source", + "name" + ], + "type": "object" + }, + "client_id": { + "description": "The client ID associated with the flag event.", + "example": "client_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + } + }, + "required": [ + "client_id", + "actor" + ], + "type": "object" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "default_value": { + "description": "The value returned for users and organizations who don't match any configured targeting rules.", + "example": false, + "type": "boolean" + }, + "description": { + "description": "A description for the Feature Flag.", + "example": "Enable advanced analytics dashboard feature", + "type": [ + "string", + "null" + ] + }, + "enabled": { + "description": "Specifies whether the Feature Flag is active for the current environment.", + "example": true, + "type": "boolean" + }, + "environment_id": { + "description": "The ID of the environment the Feature Flag belongs to.", + "example": "environment_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "id": { + "description": "Unique identifier of the Feature Flag.", + "example": "flag_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "name": { + "description": "A descriptive name for the Feature Flag.", + "example": "Advanced Analytics", + "type": "string" + }, + "object": { + "const": "feature_flag", + "type": "string" + }, + "owner": { + "description": "The owner of the Feature Flag.", + "oneOf": [ + { + "properties": { + "email": { + "description": "The email address of the flag owner.", + "example": "jane@example.com", + "type": "string" + }, + "first_name": { + "description": "The first name of the flag owner.", + "example": "Jane", + "type": [ + "string", + "null" + ] + }, + "last_name": { + "description": "The last name of the flag owner.", + "example": "Doe", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "first_name", + "last_name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "slug": { + "description": "A unique key to reference the Feature Flag.", + "example": "advanced-analytics", + "type": "string" + }, + "tags": { + "description": "Labels assigned to the Feature Flag for categorizing and filtering.", + "example": [ + "reports" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "environment_id", + "slug", + "name", + "description", + "owner", + "tags", + "enabled", + "default_value", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "flag.deleted", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "context", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "description": "Additional context about the event.", + "properties": { + "access_type": { + "description": "The access type of the flag rule.", + "enum": [ + "none", + "some", + "all" + ], + "type": "string" + }, + "actor": { + "description": "The actor who performed the action.", + "properties": { + "id": { + "description": "Unique identifier of the actor.", + "example": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "name": { + "description": "The name of the actor.", + "example": "Jane Doe", + "type": [ + "string", + "null" + ] + }, + "source": { + "enum": [ + "api", + "dashboard", + "admin_portal", + "system" + ], + "type": "string" + } + }, + "required": [ + "id", + "source", + "name" + ], + "type": "object" + }, + "client_id": { + "description": "The client ID associated with the flag event.", + "example": "client_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "configured_targets": { + "description": "The configured targets for the flag rule.", + "properties": { + "organizations": { + "description": "The organizations targeted by the flag rule.", + "items": { + "properties": { + "id": { + "description": "The ID of the organization.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "name": { + "description": "The name of the organization.", + "example": "Acme Corp", + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "users": { + "description": "The users targeted by the flag rule.", + "items": { + "properties": { + "email": { + "description": "The email of the user.", + "example": "user@example.com", + "type": "string" + }, + "id": { + "description": "The ID of the user.", + "example": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + } + }, + "required": [ + "id", + "email" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "organizations", + "users" + ], + "type": "object" + }, + "previous_attributes": { + "description": "Attributes that changed from their previous values.", + "properties": { + "context": { + "description": "The previous context attributes of the flag rule.", + "properties": { + "access_type": { + "description": "The previous access type of the flag rule.", + "enum": [ + "none", + "some", + "all" + ], + "type": "string" + }, + "configured_targets": { + "description": "The previous configured targets for the flag rule.", + "properties": { + "organizations": { + "description": "The organizations targeted by the flag rule.", + "items": { + "properties": { + "id": { + "description": "The ID of the organization.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "name": { + "description": "The name of the organization.", + "example": "Acme Corp", + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "users": { + "description": "The users targeted by the flag rule.", + "items": { + "properties": { + "email": { + "description": "The email of the user.", + "example": "user@example.com", + "type": "string" + }, + "id": { + "description": "The ID of the user.", + "example": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + } + }, + "required": [ + "id", + "email" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "organizations", + "users" + ], + "type": "object" + } + }, + "type": "object" + }, + "data": { + "description": "The previous data attributes of the flag.", + "properties": { + "default_value": { + "description": "The previous default value of the flag.", + "example": false, + "type": "boolean" + }, + "enabled": { + "description": "Whether the flag was previously enabled.", + "example": true, + "type": "boolean" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "required": [ + "client_id", + "actor", + "access_type", + "configured_targets", + "previous_attributes" + ], + "type": "object" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "default_value": { + "description": "The value returned for users and organizations who don't match any configured targeting rules.", + "example": false, + "type": "boolean" + }, + "description": { + "description": "A description for the Feature Flag.", + "example": "Enable advanced analytics dashboard feature", + "type": [ + "string", + "null" + ] + }, + "enabled": { + "description": "Specifies whether the Feature Flag is active for the current environment.", + "example": true, + "type": "boolean" + }, + "environment_id": { + "description": "The ID of the environment the Feature Flag belongs to.", + "example": "environment_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "id": { + "description": "Unique identifier of the Feature Flag.", + "example": "flag_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "name": { + "description": "A descriptive name for the Feature Flag.", + "example": "Advanced Analytics", + "type": "string" + }, + "object": { + "const": "feature_flag", + "type": "string" + }, + "owner": { + "description": "The owner of the Feature Flag.", + "oneOf": [ + { + "properties": { + "email": { + "description": "The email address of the flag owner.", + "example": "jane@example.com", + "type": "string" + }, + "first_name": { + "description": "The first name of the flag owner.", + "example": "Jane", + "type": [ + "string", + "null" + ] + }, + "last_name": { + "description": "The last name of the flag owner.", + "example": "Doe", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "first_name", + "last_name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "slug": { + "description": "A unique key to reference the Feature Flag.", + "example": "advanced-analytics", + "type": "string" + }, + "tags": { + "description": "Labels assigned to the Feature Flag for categorizing and filtering.", + "example": [ + "reports" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "environment_id", + "slug", + "name", + "description", + "owner", + "tags", + "enabled", + "default_value", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "flag.rule_updated", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "context", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "description": "Additional context about the event.", + "properties": { + "actor": { + "description": "The actor who performed the action.", + "properties": { + "id": { + "description": "Unique identifier of the actor.", + "example": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "name": { + "description": "The name of the actor.", + "example": "Jane Doe", + "type": [ + "string", + "null" + ] + }, + "source": { + "description": "The source of the actor that performed the action.", + "enum": [ + "api", + "dashboard", + "admin_portal", + "system" + ], + "type": "string" + } + }, + "required": [ + "id", + "source", + "name" + ], + "type": "object" + }, + "client_id": { + "description": "The client ID associated with the flag event.", + "example": "client_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "previous_attributes": { + "description": "Attributes that changed from their previous values.", + "properties": { + "data": { + "description": "The previous data attributes of the flag.", + "properties": { + "default_value": { + "description": "The previous default value of the flag.", + "example": false, + "type": "boolean" + }, + "description": { + "description": "The previous description of the flag.", + "example": "Enables the new feature.", + "type": [ + "string", + "null" + ] + }, + "enabled": { + "description": "Whether the flag was previously enabled.", + "example": true, + "type": "boolean" + }, + "name": { + "description": "The previous name of the flag.", + "example": "My Feature Flag", + "type": "string" + }, + "tags": { + "description": "The previous tags of the flag.", + "example": [ + "beta", + "release" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "required": [ + "client_id", + "actor" + ], + "type": "object" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "default_value": { + "description": "The value returned for users and organizations who don't match any configured targeting rules.", + "example": false, + "type": "boolean" + }, + "description": { + "description": "A description for the Feature Flag.", + "example": "Enable advanced analytics dashboard feature", + "type": [ + "string", + "null" + ] + }, + "enabled": { + "description": "Specifies whether the Feature Flag is active for the current environment.", + "example": true, + "type": "boolean" + }, + "environment_id": { + "description": "The ID of the environment the Feature Flag belongs to.", + "example": "environment_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "id": { + "description": "Unique identifier of the Feature Flag.", + "example": "flag_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "name": { + "description": "A descriptive name for the Feature Flag.", + "example": "Advanced Analytics", + "type": "string" + }, + "object": { + "const": "feature_flag", + "type": "string" + }, + "owner": { + "description": "The owner of the Feature Flag.", + "oneOf": [ + { + "properties": { + "email": { + "description": "The email address of the flag owner.", + "example": "jane@example.com", + "type": "string" + }, + "first_name": { + "description": "The first name of the flag owner.", + "example": "Jane", + "type": [ + "string", + "null" + ] + }, + "last_name": { + "description": "The last name of the flag owner.", + "example": "Doe", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "first_name", + "last_name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "slug": { + "description": "A unique key to reference the Feature Flag.", + "example": "advanced-analytics", + "type": "string" + }, + "tags": { + "description": "Labels assigned to the Feature Flag for categorizing and filtering.", + "example": [ + "reports" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "environment_id", + "slug", + "name", + "description", + "owner", + "tags", + "enabled", + "default_value", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "flag.updated", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "context", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/Group", + "description": "The event payload." + }, + "event": { + "const": "group.created", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/Group", + "description": "The event payload." + }, + "event": { + "const": "group.deleted", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "group_id": { + "description": "The ID of the Group.", + "example": "group_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "organization_membership_id": { + "description": "The ID of the OrganizationMembership.", + "example": "om_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + } + }, + "required": [ + "group_id", + "organization_membership_id" + ], + "type": "object" + }, + "event": { + "const": "group.member_added", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "group_id": { + "description": "The ID of the Group.", + "example": "group_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "organization_membership_id": { + "description": "The ID of the OrganizationMembership.", + "example": "om_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + } + }, + "required": [ + "group_id", + "organization_membership_id" + ], + "type": "object" + }, + "event": { + "const": "group.member_removed", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/Group", + "description": "The event payload." + }, + "event": { + "const": "group.updated", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "accepted_at": { + "description": "The timestamp when the invitation was accepted, or null if not yet accepted.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "accepted_user_id": { + "description": "The ID of the user who accepted the invitation, once accepted.", + "example": null, + "type": [ + "string", + "null" + ] + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "email": { + "description": "The email address of the recipient.", + "example": "marcelina.davis@example.com", + "type": "string" + }, + "expires_at": { + "description": "The timestamp when the invitation expires.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "The unique ID of the invitation.", + "example": "invitation_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + }, + "inviter_user_id": { + "description": "The ID of the user who invited the recipient, if provided.", + "example": "user_01HYGBX8ZGD19949T3BM4FW1C3", + "type": [ + "string", + "null" + ] + }, + "object": { + "const": "invitation", + "description": "Distinguishes the invitation object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the [organization](/reference/organization) that the recipient will join.", + "example": "org_01E4ZCR3C56J083X43JQXF3JK5", + "type": [ + "string", + "null" + ] + }, + "revoked_at": { + "description": "The timestamp when the invitation was revoked, or null if not revoked.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "role_slug": { + "description": "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.", + "example": "admin", + "type": [ + "string", + "null" + ] + }, + "state": { + "description": "The state of the invitation.", + "enum": [ + "pending", + "accepted", + "expired", + "revoked" + ], + "example": "pending", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "email", + "state", + "accepted_at", + "revoked_at", + "expires_at", + "organization_id", + "inviter_user_id", + "accepted_user_id", + "role_slug", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "invitation.accepted", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "accepted_at": { + "description": "The timestamp when the invitation was accepted, or null if not yet accepted.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "accepted_user_id": { + "description": "The ID of the user who accepted the invitation, once accepted.", + "example": null, + "type": [ + "string", + "null" + ] + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "email": { + "description": "The email address of the recipient.", + "example": "marcelina.davis@example.com", + "type": "string" + }, + "expires_at": { + "description": "The timestamp when the invitation expires.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "The unique ID of the invitation.", + "example": "invitation_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + }, + "inviter_user_id": { + "description": "The ID of the user who invited the recipient, if provided.", + "example": "user_01HYGBX8ZGD19949T3BM4FW1C3", + "type": [ + "string", + "null" + ] + }, + "object": { + "const": "invitation", + "description": "Distinguishes the invitation object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the [organization](/reference/organization) that the recipient will join.", + "example": "org_01E4ZCR3C56J083X43JQXF3JK5", + "type": [ + "string", + "null" + ] + }, + "revoked_at": { + "description": "The timestamp when the invitation was revoked, or null if not revoked.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "role_slug": { + "description": "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.", + "example": "admin", + "type": [ + "string", + "null" + ] + }, + "state": { + "description": "The state of the invitation.", + "enum": [ + "pending", + "accepted", + "expired", + "revoked" + ], + "example": "pending", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "email", + "state", + "accepted_at", + "revoked_at", + "expires_at", + "organization_id", + "inviter_user_id", + "accepted_user_id", + "role_slug", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "invitation.created", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "accepted_at": { + "description": "The timestamp when the invitation was accepted, or null if not yet accepted.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "accepted_user_id": { + "description": "The ID of the user who accepted the invitation, once accepted.", + "example": null, + "type": [ + "string", + "null" + ] + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "email": { + "description": "The email address of the recipient.", + "example": "marcelina.davis@example.com", + "type": "string" + }, + "expires_at": { + "description": "The timestamp when the invitation expires.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "The unique ID of the invitation.", + "example": "invitation_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + }, + "inviter_user_id": { + "description": "The ID of the user who invited the recipient, if provided.", + "example": "user_01HYGBX8ZGD19949T3BM4FW1C3", + "type": [ + "string", + "null" + ] + }, + "object": { + "const": "invitation", + "description": "Distinguishes the invitation object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the [organization](/reference/organization) that the recipient will join.", + "example": "org_01E4ZCR3C56J083X43JQXF3JK5", + "type": [ + "string", + "null" + ] + }, + "revoked_at": { + "description": "The timestamp when the invitation was revoked, or null if not revoked.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "role_slug": { + "description": "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.", + "example": "admin", + "type": [ + "string", + "null" + ] + }, + "state": { + "description": "The state of the invitation.", + "enum": [ + "pending", + "accepted", + "expired", + "revoked" + ], + "example": "pending", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "email", + "state", + "accepted_at", + "revoked_at", + "expires_at", + "organization_id", + "inviter_user_id", + "accepted_user_id", + "role_slug", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "invitation.resent", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "accepted_at": { + "description": "The timestamp when the invitation was accepted, or null if not yet accepted.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "accepted_user_id": { + "description": "The ID of the user who accepted the invitation, once accepted.", + "example": null, + "type": [ + "string", + "null" + ] + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "email": { + "description": "The email address of the recipient.", + "example": "marcelina.davis@example.com", + "type": "string" + }, + "expires_at": { + "description": "The timestamp when the invitation expires.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "The unique ID of the invitation.", + "example": "invitation_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + }, + "inviter_user_id": { + "description": "The ID of the user who invited the recipient, if provided.", + "example": "user_01HYGBX8ZGD19949T3BM4FW1C3", + "type": [ + "string", + "null" + ] + }, + "object": { + "const": "invitation", + "description": "Distinguishes the invitation object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the [organization](/reference/organization) that the recipient will join.", + "example": "org_01E4ZCR3C56J083X43JQXF3JK5", + "type": [ + "string", + "null" + ] + }, + "revoked_at": { + "description": "The timestamp when the invitation was revoked, or null if not revoked.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "role_slug": { + "description": "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.", + "example": "admin", + "type": [ + "string", + "null" + ] + }, + "state": { + "description": "The state of the invitation.", + "enum": [ + "pending", + "accepted", + "expired", + "revoked" + ], + "example": "pending", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "email", + "state", + "accepted_at", + "revoked_at", + "expires_at", + "organization_id", + "inviter_user_id", + "accepted_user_id", + "role_slug", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "invitation.revoked", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "email": { + "description": "The email address of the user.", + "example": "marcelina.davis@example.com", + "type": "string" + }, + "expires_at": { + "description": "The timestamp when the Magic Auth code expires.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "The unique ID of the Magic Auth code.", + "example": "magic_auth_01HWZBQZY2M3AMQW166Q22K88F", + "type": "string" + }, + "object": { + "const": "magic_auth", + "description": "Distinguishes the Magic Auth object.", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "user_id": { + "description": "The unique ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + "required": [ + "object", + "id", + "user_id", + "email", + "expires_at", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "magic_auth.created", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "domains": { + "description": "List of Organization Domains.", + "items": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "domain": { + "description": "Domain for the organization domain.", + "example": "foo-corp.com", + "type": "string" + }, + "id": { + "description": "Unique identifier of the organization domain.", + "example": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", + "type": "string" + }, + "object": { + "const": "organization_domain", + "description": "Distinguishes the organization domain object.", + "type": "string" + }, + "organization_id": { + "description": "ID of the parent Organization.", + "example": "org_01HE8GSH8FQPASKSY27THRKRBP", + "type": "string" + }, + "state": { + "description": "Verification state of the domain.", + "enum": [ + "failed", + "legacy_verified", + "pending", + "unverified", + "verified" + ], + "example": "pending", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "verification_prefix": { + "description": "The prefix used in DNS verification.", + "example": "superapp-domain-verification-z3kjny", + "type": "string" + }, + "verification_strategy": { + "description": "Strategy used to verify the domain.", + "enum": [ + "dns", + "manual" + ], + "example": "dns", + "type": "string" + }, + "verification_token": { + "description": "Validation token to be used in DNS TXT record.", + "example": "m5Oztg3jdK4NJLgs8uIlIprMw", + "type": "string" + } + }, + "required": [ + "object", + "id", + "organization_id", + "domain", + "created_at", + "updated_at" + ], + "type": "object" + }, + "type": "array" + }, + "external_id": { + "description": "The external ID of the Organization.", + "example": "2fe01467-f7ea-4dd2-8b79-c2b4f56d0191", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier of the Organization.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "metadata": { + "additionalProperties": { + "maxLength": 600, + "type": "string" + }, + "description": "Object containing [metadata](/authkit/metadata) key/value pairs associated with the Organization.", + "example": { + "tier": "diamond" + }, + "maxProperties": 50, + "propertyNames": { + "maxLength": 40 + }, + "type": "object" + }, + "name": { + "description": "A descriptive name for the Organization. This field does not need to be unique.", + "example": "Acme Inc.", + "type": "string" + }, + "object": { + "const": "organization", + "description": "Distinguishes the Organization object.", + "type": "string" + }, + "stripe_customer_id": { + "description": "The Stripe customer ID of the Organization.", + "example": "cus_R9qWAGMQ6nGE7V", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "name", + "domains", + "metadata", + "external_id", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "organization.created", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "domains": { + "description": "List of Organization Domains.", + "items": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "domain": { + "description": "Domain for the organization domain.", + "example": "foo-corp.com", + "type": "string" + }, + "id": { + "description": "Unique identifier of the organization domain.", + "example": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", + "type": "string" + }, + "object": { + "const": "organization_domain", + "description": "Distinguishes the organization domain object.", + "type": "string" + }, + "organization_id": { + "description": "ID of the parent Organization.", + "example": "org_01HE8GSH8FQPASKSY27THRKRBP", + "type": "string" + }, + "state": { + "description": "Verification state of the domain.", + "enum": [ + "failed", + "legacy_verified", + "pending", + "unverified", + "verified" + ], + "example": "pending", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "verification_prefix": { + "description": "The prefix used in DNS verification.", + "example": "superapp-domain-verification-z3kjny", + "type": "string" + }, + "verification_strategy": { + "description": "Strategy used to verify the domain.", + "enum": [ + "dns", + "manual" + ], + "example": "dns", + "type": "string" + }, + "verification_token": { + "description": "Validation token to be used in DNS TXT record.", + "example": "m5Oztg3jdK4NJLgs8uIlIprMw", + "type": "string" + } + }, + "required": [ + "object", + "id", + "organization_id", + "domain", + "created_at", + "updated_at" + ], + "type": "object" + }, + "type": "array" + }, + "external_id": { + "description": "The external ID of the Organization.", + "example": "2fe01467-f7ea-4dd2-8b79-c2b4f56d0191", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier of the Organization.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "metadata": { + "additionalProperties": { + "maxLength": 600, + "type": "string" + }, + "description": "Object containing [metadata](/authkit/metadata) key/value pairs associated with the Organization.", + "example": { + "tier": "diamond" + }, + "maxProperties": 50, + "propertyNames": { + "maxLength": 40 + }, + "type": "object" + }, + "name": { + "description": "A descriptive name for the Organization. This field does not need to be unique.", + "example": "Acme Inc.", + "type": "string" + }, + "object": { + "const": "organization", + "description": "Distinguishes the Organization object.", + "type": "string" + }, + "stripe_customer_id": { + "description": "The Stripe customer ID of the Organization.", + "example": "cus_R9qWAGMQ6nGE7V", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "name", + "domains", + "metadata", + "external_id", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "organization.deleted", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "domain": { + "description": "Domain for the organization domain.", + "example": "foo-corp.com", + "type": "string" + }, + "id": { + "description": "Unique identifier of the organization domain.", + "example": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", + "type": "string" + }, + "object": { + "const": "organization_domain", + "description": "Distinguishes the organization domain object.", + "type": "string" + }, + "organization_id": { + "description": "ID of the parent Organization.", + "example": "org_01HE8GSH8FQPASKSY27THRKRBP", + "type": "string" + }, + "state": { + "description": "Verification state of the domain.", + "enum": [ + "failed", + "legacy_verified", + "pending", + "unverified", + "verified" + ], + "example": "pending", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "verification_prefix": { + "description": "The prefix used in DNS verification.", + "example": "superapp-domain-verification-z3kjny", + "type": "string" + }, + "verification_strategy": { + "description": "Strategy used to verify the domain.", + "enum": [ + "dns", + "manual" + ], + "example": "dns", + "type": "string" + }, + "verification_token": { + "description": "Validation token to be used in DNS TXT record.", + "example": "m5Oztg3jdK4NJLgs8uIlIprMw", + "type": "string" + } + }, + "required": [ + "object", + "id", + "organization_id", + "domain", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "organization_domain.created", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "domain": { + "description": "Domain for the organization domain.", + "example": "foo-corp.com", + "type": "string" + }, + "id": { + "description": "Unique identifier of the organization domain.", + "example": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", + "type": "string" + }, + "object": { + "const": "organization_domain", + "description": "Distinguishes the organization domain object.", + "type": "string" + }, + "organization_id": { + "description": "ID of the parent Organization.", + "example": "org_01HE8GSH8FQPASKSY27THRKRBP", + "type": "string" + }, + "state": { + "description": "Verification state of the domain.", + "enum": [ + "failed", + "legacy_verified", + "pending", + "unverified", + "verified" + ], + "example": "pending", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "verification_prefix": { + "description": "The prefix used in DNS verification.", + "example": "superapp-domain-verification-z3kjny", + "type": "string" + }, + "verification_strategy": { + "description": "Strategy used to verify the domain.", + "enum": [ + "dns", + "manual" + ], + "example": "dns", + "type": "string" + }, + "verification_token": { + "description": "Validation token to be used in DNS TXT record.", + "example": "m5Oztg3jdK4NJLgs8uIlIprMw", + "type": "string" + } + }, + "required": [ + "object", + "id", + "organization_id", + "domain", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "organization_domain.deleted", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "domain": { + "description": "Domain for the organization domain.", + "example": "foo-corp.com", + "type": "string" + }, + "id": { + "description": "Unique identifier of the organization domain.", + "example": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", + "type": "string" + }, + "object": { + "const": "organization_domain", + "description": "Distinguishes the organization domain object.", + "type": "string" + }, + "organization_id": { + "description": "ID of the parent Organization.", + "example": "org_01HE8GSH8FQPASKSY27THRKRBP", + "type": "string" + }, + "state": { + "description": "Verification state of the domain.", + "enum": [ + "failed", + "legacy_verified", + "pending", + "unverified", + "verified" + ], + "example": "pending", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "verification_prefix": { + "description": "The prefix used in DNS verification.", + "example": "superapp-domain-verification-z3kjny", + "type": "string" + }, + "verification_strategy": { + "description": "Strategy used to verify the domain.", + "enum": [ + "dns", + "manual" + ], + "example": "dns", + "type": "string" + }, + "verification_token": { + "description": "Validation token to be used in DNS TXT record.", + "example": "m5Oztg3jdK4NJLgs8uIlIprMw", + "type": "string" + } + }, + "required": [ + "object", + "id", + "organization_id", + "domain", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "organization_domain.updated", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "organization_domain": { + "description": "The organization domain that failed verification.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "domain": { + "description": "Domain for the organization domain.", + "example": "foo-corp.com", + "type": "string" + }, + "id": { + "description": "Unique identifier of the organization domain.", + "example": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", + "type": "string" + }, + "object": { + "const": "organization_domain", + "description": "Distinguishes the organization domain object.", + "type": "string" + }, + "organization_id": { + "description": "ID of the parent Organization.", + "example": "org_01HE8GSH8FQPASKSY27THRKRBP", + "type": "string" + }, + "state": { + "description": "Verification state of the domain.", + "enum": [ + "failed", + "legacy_verified", + "pending", + "unverified", + "verified" + ], + "example": "pending", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "verification_prefix": { + "description": "The prefix used in DNS verification.", + "example": "superapp-domain-verification-z3kjny", + "type": "string" + }, + "verification_strategy": { + "description": "Strategy used to verify the domain.", + "enum": [ + "dns", + "manual" + ], + "example": "dns", + "type": "string" + }, + "verification_token": { + "description": "Validation token to be used in DNS TXT record.", + "example": "m5Oztg3jdK4NJLgs8uIlIprMw", + "type": "string" + } + }, + "required": [ + "object", + "id", + "organization_id", + "domain", + "created_at", + "updated_at" + ], + "type": "object" + }, + "reason": { + "description": "The reason the domain verification failed.", + "enum": [ + "domain_verification_period_expired", + "domain_verified_by_other_organization" + ], + "example": "domain_verification_period_expired", + "type": "string" + } + }, + "required": [ + "reason", + "organization_domain" + ], + "type": "object" + }, + "event": { + "const": "organization_domain.verification_failed", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "domain": { + "description": "Domain for the organization domain.", + "example": "foo-corp.com", + "type": "string" + }, + "id": { + "description": "Unique identifier of the organization domain.", + "example": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", + "type": "string" + }, + "object": { + "const": "organization_domain", + "description": "Distinguishes the organization domain object.", + "type": "string" + }, + "organization_id": { + "description": "ID of the parent Organization.", + "example": "org_01HE8GSH8FQPASKSY27THRKRBP", + "type": "string" + }, + "state": { + "description": "Verification state of the domain.", + "enum": [ + "failed", + "legacy_verified", + "pending", + "unverified", + "verified" + ], + "example": "pending", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "verification_prefix": { + "description": "The prefix used in DNS verification.", + "example": "superapp-domain-verification-z3kjny", + "type": "string" + }, + "verification_strategy": { + "description": "Strategy used to verify the domain.", + "enum": [ + "dns", + "manual" + ], + "example": "dns", + "type": "string" + }, + "verification_token": { + "description": "Validation token to be used in DNS TXT record.", + "example": "m5Oztg3jdK4NJLgs8uIlIprMw", + "type": "string" + } + }, + "required": [ + "object", + "id", + "organization_id", + "domain", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "organization_domain.verified", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "custom_attributes": { + "additionalProperties": {}, + "description": "Custom attributes associated with the membership.", + "type": "object" + }, + "directory_managed": { + "description": "Whether the membership is managed by a directory sync provider.", + "example": false, + "type": "boolean" + }, + "id": { + "description": "Unique identifier of the organization membership.", + "example": "om_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "object": { + "const": "organization_membership", + "description": "Distinguishes the organization membership object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "role": { + "$ref": "#/components/schemas/SlimRole", + "description": "The role associated with the membership." + }, + "roles": { + "description": "The roles associated with the membership.", + "items": { + "$ref": "#/components/schemas/SlimRole" + }, + "type": "array" + }, + "status": { + "description": "The status of the organization membership.", + "enum": [ + "active", + "inactive", + "pending" + ], + "example": "active", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "user_id": { + "description": "The ID of the user.", + "example": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + } + }, + "required": [ + "object", + "id", + "user_id", + "organization_id", + "status", + "role", + "custom_attributes", + "directory_managed", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "organization_membership.created", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "custom_attributes": { + "additionalProperties": {}, + "description": "Custom attributes associated with the membership.", + "type": "object" + }, + "directory_managed": { + "description": "Whether the membership is managed by a directory sync provider.", + "example": false, + "type": "boolean" + }, + "id": { + "description": "Unique identifier of the organization membership.", + "example": "om_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "object": { + "const": "organization_membership", + "description": "Distinguishes the organization membership object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "role": { + "$ref": "#/components/schemas/SlimRole", + "description": "The role associated with the membership." + }, + "roles": { + "description": "The roles associated with the membership.", + "items": { + "$ref": "#/components/schemas/SlimRole" + }, + "type": "array" + }, + "status": { + "description": "The status of the organization membership.", + "enum": [ + "active", + "inactive", + "pending" + ], + "example": "active", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "user_id": { + "description": "The ID of the user.", + "example": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + } + }, + "required": [ + "object", + "id", + "user_id", + "organization_id", + "status", + "role", + "custom_attributes", + "directory_managed", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "organization_membership.deleted", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "custom_attributes": { + "additionalProperties": {}, + "description": "Custom attributes associated with the membership.", + "type": "object" + }, + "directory_managed": { + "description": "Whether the membership is managed by a directory sync provider.", + "example": false, + "type": "boolean" + }, + "id": { + "description": "Unique identifier of the organization membership.", + "example": "om_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "object": { + "const": "organization_membership", + "description": "Distinguishes the organization membership object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "role": { + "$ref": "#/components/schemas/SlimRole", + "description": "The role associated with the membership." + }, + "roles": { + "description": "The roles associated with the membership.", + "items": { + "$ref": "#/components/schemas/SlimRole" + }, + "type": "array" + }, + "status": { + "description": "The status of the organization membership.", + "enum": [ + "active", + "inactive", + "pending" + ], + "example": "active", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "user_id": { + "description": "The ID of the user.", + "example": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + } + }, + "required": [ + "object", + "id", + "user_id", + "organization_id", + "status", + "role", + "custom_attributes", + "directory_managed", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "organization_membership.updated", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "A description of the role.", + "example": "Can manage billing settings.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The name of the role.", + "example": "Billing Administrator", + "type": "string" + }, + "object": { + "const": "organization_role", + "description": "Distinguishes the organization role object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization the role belongs to.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "permissions": { + "description": "The permissions granted by the role.", + "example": [ + "users:read", + "users:write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "resource_type_slug": { + "description": "The slug of the resource type the role applies to.", + "example": "organization", + "type": "string" + }, + "slug": { + "description": "The slug identifier of the role.", + "example": "billing-admin", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "organization_id", + "slug", + "name", + "description", + "resource_type_slug", + "permissions", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "organization_role.created", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "A description of the role.", + "example": "Can manage billing settings.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The name of the role.", + "example": "Billing Administrator", + "type": "string" + }, + "object": { + "const": "organization_role", + "description": "Distinguishes the organization role object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization the role belongs to.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "permissions": { + "description": "The permissions granted by the role.", + "example": [ + "users:read", + "users:write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "resource_type_slug": { + "description": "The slug of the resource type the role applies to.", + "example": "organization", + "type": "string" + }, + "slug": { + "description": "The slug identifier of the role.", + "example": "billing-admin", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "organization_id", + "slug", + "name", + "description", + "resource_type_slug", + "permissions", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "organization_role.deleted", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "A description of the role.", + "example": "Can manage billing settings.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The name of the role.", + "example": "Billing Administrator", + "type": "string" + }, + "object": { + "const": "organization_role", + "description": "Distinguishes the organization role object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization the role belongs to.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "permissions": { + "description": "The permissions granted by the role.", + "example": [ + "users:read", + "users:write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "resource_type_slug": { + "description": "The slug of the resource type the role applies to.", + "example": "organization", + "type": "string" + }, + "slug": { + "description": "The slug identifier of the role.", + "example": "billing-admin", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "organization_id", + "slug", + "name", + "description", + "resource_type_slug", + "permissions", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "organization_role.updated", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "domains": { + "description": "List of Organization Domains.", + "items": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "domain": { + "description": "Domain for the organization domain.", + "example": "foo-corp.com", + "type": "string" + }, + "id": { + "description": "Unique identifier of the organization domain.", + "example": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", + "type": "string" + }, + "object": { + "const": "organization_domain", + "description": "Distinguishes the organization domain object.", + "type": "string" + }, + "organization_id": { + "description": "ID of the parent Organization.", + "example": "org_01HE8GSH8FQPASKSY27THRKRBP", + "type": "string" + }, + "state": { + "description": "Verification state of the domain.", + "enum": [ + "failed", + "legacy_verified", + "pending", + "unverified", + "verified" + ], + "example": "pending", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "verification_prefix": { + "description": "The prefix used in DNS verification.", + "example": "superapp-domain-verification-z3kjny", + "type": "string" + }, + "verification_strategy": { + "description": "Strategy used to verify the domain.", + "enum": [ + "dns", + "manual" + ], + "example": "dns", + "type": "string" + }, + "verification_token": { + "description": "Validation token to be used in DNS TXT record.", + "example": "m5Oztg3jdK4NJLgs8uIlIprMw", + "type": "string" + } + }, + "required": [ + "object", + "id", + "organization_id", + "domain", + "created_at", + "updated_at" + ], + "type": "object" + }, + "type": "array" + }, + "external_id": { + "description": "The external ID of the Organization.", + "example": "2fe01467-f7ea-4dd2-8b79-c2b4f56d0191", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier of the Organization.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "metadata": { + "additionalProperties": { + "maxLength": 600, + "type": "string" + }, + "description": "Object containing [metadata](/authkit/metadata) key/value pairs associated with the Organization.", + "example": { + "tier": "diamond" + }, + "maxProperties": 50, + "propertyNames": { + "maxLength": 40 + }, + "type": "object" + }, + "name": { + "description": "A descriptive name for the Organization. This field does not need to be unique.", + "example": "Acme Inc.", + "type": "string" + }, + "object": { + "const": "organization", + "description": "Distinguishes the Organization object.", + "type": "string" + }, + "stripe_customer_id": { + "description": "The Stripe customer ID of the Organization.", + "example": "cus_R9qWAGMQ6nGE7V", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "name", + "domains", + "metadata", + "external_id", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "organization.updated", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "The timestamp when the password reset token was created.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "email": { + "description": "The email address of the user.", + "example": "marcelina.davis@example.com", + "type": "string" + }, + "expires_at": { + "description": "The timestamp when the password reset token expires.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "The unique ID of the password reset object.", + "example": "password_reset_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + }, + "object": { + "const": "password_reset", + "description": "Distinguishes the password reset object.", + "type": "string" + }, + "user_id": { + "description": "The unique ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + "required": [ + "object", + "id", + "user_id", + "email", + "expires_at", + "created_at" + ], + "type": "object" + }, + "event": { + "const": "password_reset.created", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "The timestamp when the password reset token was created.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "email": { + "description": "The email address of the user.", + "example": "marcelina.davis@example.com", + "type": "string" + }, + "expires_at": { + "description": "The timestamp when the password reset token expires.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "The unique ID of the password reset object.", + "example": "password_reset_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + }, + "object": { + "const": "password_reset", + "description": "Distinguishes the password reset object.", + "type": "string" + }, + "user_id": { + "description": "The unique ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + "required": [ + "object", + "id", + "user_id", + "email", + "expires_at", + "created_at" + ], + "type": "object" + }, + "event": { + "const": "password_reset.succeeded", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "A description of the permission.", + "example": "Allows managing billing settings.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier of the permission.", + "example": "perm_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "name": { + "description": "The name of the permission.", + "example": "Manage Billing", + "type": "string" + }, + "object": { + "const": "permission", + "description": "Distinguishes the permission object.", + "type": "string" + }, + "slug": { + "description": "The slug identifier of the permission.", + "example": "billing:manage", + "type": "string" + }, + "system": { + "description": "Whether the permission is a system permission.", + "example": false, + "type": "boolean" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "slug", + "name", + "description", + "system", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "permission.created", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "A description of the permission.", + "example": "Allows managing billing settings.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier of the permission.", + "example": "perm_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "name": { + "description": "The name of the permission.", + "example": "Manage Billing", + "type": "string" + }, + "object": { + "const": "permission", + "description": "Distinguishes the permission object.", + "type": "string" + }, + "slug": { + "description": "The slug identifier of the permission.", + "example": "billing:manage", + "type": "string" + }, + "system": { + "description": "Whether the permission is a system permission.", + "example": false, + "type": "boolean" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "slug", + "name", + "description", + "system", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "permission.deleted", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "A description of the permission.", + "example": "Allows managing billing settings.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier of the permission.", + "example": "perm_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "name": { + "description": "The name of the permission.", + "example": "Manage Billing", + "type": "string" + }, + "object": { + "const": "permission", + "description": "Distinguishes the permission object.", + "type": "string" + }, + "slug": { + "description": "The slug identifier of the permission.", + "example": "billing:manage", + "type": "string" + }, + "system": { + "description": "Whether the permission is a system permission.", + "example": false, + "type": "boolean" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "slug", + "name", + "description", + "system", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "permission.updated", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/PipesConnectedAccount", + "description": "The event payload." + }, + "event": { + "const": "pipes.connected_account.connected", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data_integration_id": { + "description": "The unique ID of the data integration.", + "example": "data_integration_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "error_code": { + "description": "A machine-readable error code for the failure.", + "example": "authorization_code_exchange_error", + "type": "string" + }, + "error_reason": { + "description": "A human-readable explanation of the failure.", + "example": "The authorization code has expired.", + "type": [ + "string", + "null" + ] + }, + "object": { + "const": "connection_failed", + "description": "The object type.", + "example": "connection_failed", + "type": "string" + }, + "organization_id": { + "description": "The ID of the Organization the connection attempt belongs to.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": [ + "string", + "null" + ] + }, + "provider_error": { + "description": "The raw error code returned by the OAuth provider.", + "example": "access_denied", + "type": [ + "string", + "null" + ] + }, + "provider_error_description": { + "description": "The raw error description returned by the OAuth provider.", + "example": "The user denied the authorization request.", + "type": [ + "string", + "null" + ] + }, + "provider_slug": { + "description": "The provider slug for this connection attempt.", + "example": "github", + "type": "string" + }, + "user_id": { + "description": "The ID of the User the connection attempt belongs to.", + "example": "user_01EHZNVPK3SFK441A1RGBFSHRT", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "object", + "data_integration_id", + "provider_slug", + "user_id", + "organization_id", + "error_code", + "error_reason", + "provider_error", + "provider_error_description", + "created_at" + ], + "title": "PipesConnectionFailed", + "type": "object" + }, + "event": { + "const": "pipes.connected_account.connection_failed", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/PipesConnectedAccount", + "description": "The event payload." + }, + "event": { + "const": "pipes.connected_account.disconnected", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/PipesConnectedAccount", + "description": "The event payload." + }, + "event": { + "const": "pipes.connected_account.reauthorization_needed", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "object": { + "const": "role", + "description": "Distinguishes the role object.", + "type": "string" + }, + "permissions": { + "description": "The permissions granted by the role.", + "example": [ + "users:read", + "users:write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "resource_type_slug": { + "description": "The slug of the resource type the role applies to.", + "example": "organization", + "type": "string" + }, + "slug": { + "description": "The slug identifier of the role.", + "example": "admin", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "slug", + "resource_type_slug", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "role.created", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "object": { + "const": "role", + "description": "Distinguishes the role object.", + "type": "string" + }, + "permissions": { + "description": "The permissions granted by the role.", + "example": [ + "users:read", + "users:write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "resource_type_slug": { + "description": "The slug of the resource type the role applies to.", + "example": "organization", + "type": "string" + }, + "slug": { + "description": "The slug identifier of the role.", + "example": "admin", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "slug", + "resource_type_slug", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "role.deleted", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "object": { + "const": "role", + "description": "Distinguishes the role object.", + "type": "string" + }, + "permissions": { + "description": "The permissions granted by the role.", + "example": [ + "users:read", + "users:write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "resource_type_slug": { + "description": "The slug of the resource type the role applies to.", + "example": "organization", + "type": "string" + }, + "slug": { + "description": "The slug identifier of the role.", + "example": "admin", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "slug", + "resource_type_slug", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "role.updated", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "auth_method": { + "description": "The authentication method used to create this session.", + "enum": [ + "cross_app_auth", + "external_auth", + "impersonation", + "magic_code", + "migrated_session", + "oauth", + "passkey", + "password", + "sso", + "unknown" + ], + "example": "sso", + "type": "string" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "ended_at": { + "description": "The timestamp when the session ended.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "expires_at": { + "description": "The timestamp when the session expires.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "The unique ID of the session.", + "example": "session_01H93ZY4F80QPBEZ1R5B2SHQG8", + "type": "string" + }, + "impersonator": { + "description": "Information about the impersonator if this session was created via impersonation.", + "properties": { + "email": { + "description": "The email address of the WorkOS Dashboard user who is impersonating the user.", + "example": "admin@foocorp.com", + "type": "string" + }, + "reason": { + "description": "The justification the impersonator gave for impersonating the user.", + "example": "Investigating an issue with the customer's account.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "reason" + ], + "type": "object" + }, + "ip_address": { + "description": "The IP address from which the session was created.", + "example": "198.51.100.42", + "type": [ + "string", + "null" + ] + }, + "object": { + "const": "session", + "description": "Distinguishes the session object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization this session is associated with.", + "example": "org_01H945H0YD4F97JN9MATX7BYAG", + "type": "string" + }, + "status": { + "description": "The current status of the session.", + "enum": [ + "active", + "expired", + "revoked" + ], + "example": "active", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "user_agent": { + "description": "The user agent string from the device that created the session.", + "example": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36", + "type": [ + "string", + "null" + ] + }, + "user_id": { + "description": "The ID of the user this session belongs to.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + "required": [ + "object", + "id", + "ip_address", + "user_agent", + "user_id", + "auth_method", + "status", + "expires_at", + "ended_at", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "session.created", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "auth_method": { + "description": "The authentication method used to create this session.", + "enum": [ + "cross_app_auth", + "external_auth", + "impersonation", + "magic_code", + "migrated_session", + "oauth", + "passkey", + "password", + "sso", + "unknown" + ], + "example": "sso", + "type": "string" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "ended_at": { + "description": "The timestamp when the session ended.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "expires_at": { + "description": "The timestamp when the session expires.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "The unique ID of the session.", + "example": "session_01H93ZY4F80QPBEZ1R5B2SHQG8", + "type": "string" + }, + "impersonator": { + "description": "Information about the impersonator if this session was created via impersonation.", + "properties": { + "email": { + "description": "The email address of the WorkOS Dashboard user who is impersonating the user.", + "example": "admin@foocorp.com", + "type": "string" + }, + "reason": { + "description": "The justification the impersonator gave for impersonating the user.", + "example": "Investigating an issue with the customer's account.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "reason" + ], + "type": "object" + }, + "ip_address": { + "description": "The IP address from which the session was created.", + "example": "198.51.100.42", + "type": [ + "string", + "null" + ] + }, + "object": { + "const": "session", + "description": "Distinguishes the session object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization this session is associated with.", + "example": "org_01H945H0YD4F97JN9MATX7BYAG", + "type": "string" + }, + "status": { + "description": "The current status of the session.", + "enum": [ + "active", + "expired", + "revoked" + ], + "example": "active", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "user_agent": { + "description": "The user agent string from the device that created the session.", + "example": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36", + "type": [ + "string", + "null" + ] + }, + "user_id": { + "description": "The ID of the user this session belongs to.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + "required": [ + "object", + "id", + "ip_address", + "user_agent", + "user_id", + "auth_method", + "status", + "expires_at", + "ended_at", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "session.reauthenticated", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "auth_method": { + "description": "The authentication method used to create this session.", + "enum": [ + "cross_app_auth", + "external_auth", + "impersonation", + "magic_code", + "migrated_session", + "oauth", + "passkey", + "password", + "sso", + "unknown" + ], + "example": "sso", + "type": "string" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "ended_at": { + "description": "The timestamp when the session ended.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "expires_at": { + "description": "The timestamp when the session expires.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "The unique ID of the session.", + "example": "session_01H93ZY4F80QPBEZ1R5B2SHQG8", + "type": "string" + }, + "impersonator": { + "description": "Information about the impersonator if this session was created via impersonation.", + "properties": { + "email": { + "description": "The email address of the WorkOS Dashboard user who is impersonating the user.", + "example": "admin@foocorp.com", + "type": "string" + }, + "reason": { + "description": "The justification the impersonator gave for impersonating the user.", + "example": "Investigating an issue with the customer's account.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "reason" + ], + "type": "object" + }, + "ip_address": { + "description": "The IP address from which the session was created.", + "example": "198.51.100.42", + "type": [ + "string", + "null" + ] + }, + "object": { + "const": "session", + "description": "Distinguishes the session object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization this session is associated with.", + "example": "org_01H945H0YD4F97JN9MATX7BYAG", + "type": "string" + }, + "status": { + "description": "The current status of the session.", + "enum": [ + "active", + "expired", + "revoked" + ], + "example": "active", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "user_agent": { + "description": "The user agent string from the device that created the session.", + "example": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36", + "type": [ + "string", + "null" + ] + }, + "user_id": { + "description": "The ID of the user this session belongs to.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + "required": [ + "object", + "id", + "ip_address", + "user_agent", + "user_id", + "auth_method", + "status", + "expires_at", + "ended_at", + "created_at", + "updated_at" + ], + "type": "object" + }, + "event": { + "const": "session.revoked", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/UserlandUser", + "description": "The event payload." + }, + "event": { + "const": "user.created", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/UserlandUser", + "description": "The event payload." + }, + "event": { + "const": "user.deleted", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/UserlandUser", + "description": "The event payload." + }, + "event": { + "const": "user.updated", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "key_provider": { + "$ref": "#/components/schemas/VaultByokKeyProvider" + }, + "organization_id": { + "description": "The unique identifier of the organization.", + "example": "org_01EHT88Z8J8795GZNQ4ZP1J81T", + "type": "string" + } + }, + "required": [ + "organization_id", + "key_provider" + ], + "type": "object" + }, + "event": { + "const": "vault.byok_key.deleted", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "key_provider": { + "$ref": "#/components/schemas/VaultByokKeyProvider" + }, + "organization_id": { + "description": "The unique identifier of the organization.", + "example": "org_01EHT88Z8J8795GZNQ4ZP1J81T", + "type": "string" + }, + "verified": { + "description": "Whether the BYOK key verification completed successfully.", + "example": true, + "type": "boolean" + } + }, + "required": [ + "organization_id", + "key_provider", + "verified" + ], + "type": "object" + }, + "event": { + "const": "vault.byok_key.verification_completed", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "actor_id": { + "description": "The unique identifier of the actor.", + "example": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "actor_name": { + "description": "The name of the actor.", + "example": "Jane Doe", + "type": "string" + }, + "actor_source": { + "enum": [ + "api", + "dashboard" + ], + "type": "string" + }, + "key_context": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "key_id": { + "description": "The unique identifier of the encryption key.", + "example": "key_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "kv_name": { + "description": "The name of the key-value store.", + "example": "user-secrets", + "type": "string" + } + }, + "required": [ + "actor_id", + "actor_source", + "actor_name", + "kv_name", + "key_id", + "key_context" + ], + "type": "object" + }, + "event": { + "const": "vault.data.created", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "actor_id": { + "description": "The unique identifier of the actor.", + "example": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "actor_name": { + "description": "The name of the actor.", + "example": "Jane Doe", + "type": "string" + }, + "actor_source": { + "enum": [ + "api", + "dashboard" + ], + "type": "string" + }, + "kv_name": { + "description": "The name of the key-value store.", + "example": "user-secrets", + "type": "string" + } + }, + "required": [ + "actor_id", + "actor_source", + "actor_name", + "kv_name" + ], + "type": "object" + }, + "event": { + "const": "vault.data.deleted", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "actor_id": { + "description": "The unique identifier of the actor.", + "example": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "actor_name": { + "description": "The name of the actor.", + "example": "Jane Doe", + "type": "string" + }, + "actor_source": { + "enum": [ + "api", + "dashboard" + ], + "type": "string" + }, + "key_id": { + "description": "The unique identifier of the encryption key.", + "example": "key_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "kv_name": { + "description": "The name of the key-value store.", + "example": "user-secrets", + "type": "string" + } + }, + "required": [ + "actor_id", + "actor_source", + "actor_name", + "kv_name", + "key_id" + ], + "type": "object" + }, + "event": { + "const": "vault.data.read", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "actor_id": { + "description": "The unique identifier of the actor.", + "example": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "actor_name": { + "description": "The name of the actor.", + "example": "Jane Doe", + "type": "string" + }, + "actor_source": { + "enum": [ + "api", + "dashboard" + ], + "type": "string" + }, + "key_context": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "key_id": { + "description": "The unique identifier of the encryption key.", + "example": "key_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "kv_name": { + "description": "The name of the key-value store.", + "example": "user-secrets", + "type": "string" + } + }, + "required": [ + "actor_id", + "actor_source", + "actor_name", + "kv_name", + "key_id", + "key_context" + ], + "type": "object" + }, + "event": { + "const": "vault.data.updated", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "actor_id": { + "description": "The unique identifier of the actor.", + "example": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "actor_name": { + "description": "The name of the actor.", + "example": "Jane Doe", + "type": "string" + }, + "actor_source": { + "enum": [ + "api", + "dashboard" + ], + "type": "string" + }, + "key_id": { + "description": "The unique identifier of the data encryption key.", + "example": "key_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + } + }, + "required": [ + "actor_id", + "actor_source", + "actor_name", + "key_id" + ], + "type": "object" + }, + "event": { + "const": "vault.dek.decrypted", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "actor_id": { + "description": "The unique identifier of the actor.", + "example": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "actor_name": { + "description": "The name of the actor.", + "example": "Jane Doe", + "type": "string" + }, + "actor_source": { + "enum": [ + "api", + "dashboard" + ], + "type": "string" + }, + "key_context": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "key_ids": { + "description": "The unique identifiers of the data encryption keys.", + "example": [ + "dek_01EHWNCE74X7JSDV0X3SZ3KJNY" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "actor_id", + "actor_source", + "actor_name", + "key_ids", + "key_context" + ], + "type": "object" + }, + "event": { + "const": "vault.dek.read", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "actor_id": { + "description": "The unique identifier of the actor.", + "example": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "actor_name": { + "description": "The name of the actor.", + "example": "Jane Doe", + "type": "string" + }, + "actor_source": { + "enum": [ + "api", + "dashboard" + ], + "type": "string" + }, + "key_id": { + "description": "The unique identifier of the key encryption key.", + "example": "key_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "key_name": { + "description": "The name of the key encryption key.", + "example": "production-kek", + "type": "string" + } + }, + "required": [ + "actor_id", + "actor_source", + "actor_name", + "key_name", + "key_id" + ], + "type": "object" + }, + "event": { + "const": "vault.kek.created", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "actor_id": { + "description": "The unique identifier of the actor.", + "example": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "actor_name": { + "description": "The name of the actor.", + "example": "Jane Doe", + "type": "string" + }, + "actor_source": { + "enum": [ + "api", + "dashboard" + ], + "type": "string" + }, + "kv_name": { + "description": "The name of the key-value store.", + "example": "user-secrets", + "type": "string" + } + }, + "required": [ + "actor_id", + "actor_source", + "actor_name", + "kv_name" + ], + "type": "object" + }, + "event": { + "const": "vault.metadata.read", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "description": "The event payload.", + "properties": { + "actor_id": { + "description": "The unique identifier of the actor.", + "example": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "actor_name": { + "description": "The name of the actor.", + "example": "Jane Doe", + "type": "string" + }, + "actor_source": { + "enum": [ + "api", + "dashboard" + ], + "type": "string" + } + }, + "required": [ + "actor_id", + "actor_source", + "actor_name" + ], + "type": "object" + }, + "event": { + "const": "vault.names.listed", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/WaitlistUser", + "description": "The event payload." + }, + "event": { + "const": "waitlist_user.approved", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/WaitlistUser", + "description": "The event payload." + }, + "event": { + "const": "waitlist_user.created", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + }, + { + "properties": { + "context": { + "$ref": "#/components/schemas/EventContextDto" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data": { + "$ref": "#/components/schemas/WaitlistUser", + "description": "The event payload." + }, + "event": { + "const": "waitlist_user.denied", + "type": "string" + }, + "id": { + "description": "Unique identifier for the event.", + "example": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "event", + "description": "Distinguishes the Event object.", + "type": "string" + } + }, + "required": [ + "id", + "event", + "data", + "created_at", + "object" + ], + "type": "object" + } + ] + } + ], + "description": "An event emitted by WorkOS.", + "example": { + "context": {}, + "created_at": "2021-06-25T19:07:33.155Z", + "data": { + "created_at": "2021-06-25T19:07:33.155Z", + "custom_attributes": {}, + "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", + "email": "veda@foo-corp.com", + "emails": [ + { + "primary": true, + "type": "work", + "value": "veda@foo-corp.com" + } + ], + "first_name": "Veda", + "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", + "idp_id": "2836", + "last_name": "Torp", + "object": "directory_user", + "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", + "raw_attributes": {}, + "state": "active", + "updated_at": "2021-06-25T19:07:33.155Z", + "username": "veda@foo-corp.com" + }, + "event": "dsync.user.created", + "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", + "object": "event" + } + }, + "ExpireApiKeyDto": { + "properties": { + "expires_at": { + "description": "When the API key should expire. If omitted or in the past, the key expires immediately. Use null to clear a scheduled future expiration.", + "example": "2030-01-01T00:00:00.000Z", + "format": "date-time", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "ExternalAuthCompleteResponse": { + "properties": { + "redirect_uri": { + "description": "URI to redirect the user back to AuthKit to complete the OAuth flow.", + "example": "https://your-authkit-domain.workos.com/oauth/authorize/complete?state=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdGF0ZSI6InJhbmRvbV9zdGF0ZV9zdHJpbmciLCJpYXQiOjE3NDI2MDQ4NTN9.abc123def456ghi789", + "type": "string" + } + }, + "required": [ + "redirect_uri" + ], + "type": "object" + }, + "Flag": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "default_value": { + "description": "The value returned for users and organizations who don't match any configured targeting rules.", + "example": false, + "type": "boolean" + }, + "description": { + "description": "A description for the Feature Flag.", + "example": "Enable advanced analytics dashboard feature", + "type": [ + "string", + "null" + ] + }, + "enabled": { + "description": "Specifies whether the Feature Flag is active for the current environment.", + "example": true, + "type": "boolean" + }, + "id": { + "description": "Unique identifier of the Feature Flag.", + "example": "flag_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "name": { + "description": "A descriptive name for the Feature Flag. This field does not need to be unique.", + "example": "Advanced Analytics", + "type": "string" + }, + "object": { + "const": "feature_flag", + "description": "Distinguishes the Feature Flag object.", + "type": "string" + }, + "owner": { + "description": "The owner of the Feature Flag.", + "oneOf": [ + { + "properties": { + "email": { + "description": "The email address of the flag owner.", + "example": "jane@example.com", + "type": "string" + }, + "first_name": { + "description": "The first name of the flag owner.", + "example": "Jane", + "type": [ + "string", + "null" + ] + }, + "last_name": { + "description": "The last name of the flag owner.", + "example": "Doe", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "first_name", + "last_name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "slug": { + "description": "A unique key to reference the Feature Flag.", + "example": "advanced-analytics", + "type": "string" + }, + "tags": { + "description": "Labels assigned to the Feature Flag for categorizing and filtering.", + "example": [ + "reports" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "slug", + "name", + "description", + "owner", + "tags", + "enabled", + "default_value", + "created_at", + "updated_at" + ], + "type": "object" + }, + "FlagList": { + "properties": { + "data": { + "description": "The list of records for the current page.", + "items": { + "$ref": "#/components/schemas/Flag" + }, + "type": "array" + }, + "list_metadata": { + "description": "Pagination cursors for navigating between pages of results.", + "properties": { + "after": { + "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": "flag_01HXYZ987654321KJIHGFEDCBA", + "type": [ + "string", + "null" + ] + }, + "before": { + "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": "flag_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "before", + "after" + ], + "type": "object" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "required": [ + "object", + "data", + "list_metadata" + ], + "type": "object" + }, + "GenerateLinkDto": { + "properties": { + "intent": { + "description": "\n The intent of the Admin Portal.\n - `sso` - Launch Admin Portal for creating SSO connections\n - `dsync` - Launch Admin Portal for creating Directory Sync connections\n - `audit_logs` - Launch Admin Portal for viewing Audit Logs\n - `log_streams` - Launch Admin Portal for creating Log Streams\n - `domain_verification` - Launch Admin Portal for Domain Verification\n - `certificate_renewal` - Launch Admin Portal for renewing SAML Certificates\n - `bring_your_own_key` - Launch Admin Portal for configuring Bring Your Own Key", + "enum": [ + "sso", + "dsync", + "audit_logs", + "log_streams", + "domain_verification", + "certificate_renewal", + "bring_your_own_key" + ], + "example": "sso", + "type": "string" + }, + "intent_options": { + "$ref": "#/components/schemas/IntentOptions", + "description": "Options to configure the Admin Portal based on the intent." + }, + "it_contact_emails": { + "description": "The email addresses of the IT contacts to grant access to the Admin Portal for the given organization. Accepts up to 20 emails.", + "example": [ + "it-contact@example.com" + ], + "items": { + "format": "email", + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "organization": { + "description": "An [Organization](/reference/organization) identifier.", + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "return_url": { + "description": "The URL to go to when an admin clicks on your logo in the Admin Portal. If not specified, the return URL configured on the [Redirects](https://dashboard.workos.com/redirects) page will be used.", + "example": "https://example.com/admin-portal/return", + "type": "string" + }, + "success_url": { + "description": "The URL to redirect the admin to when they finish setup. If not specified, the success URL configured on the [Redirects](https://dashboard.workos.com/redirects) page will be used.", + "example": "https://example.com/admin-portal/success", + "type": "string" + } + }, + "required": [ + "organization" + ], + "type": "object" + }, + "Group": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "An optional description of the Group.", + "example": "The engineering team", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique ID of the Group.", + "example": "group_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "name": { + "description": "The name of the Group.", + "example": "Engineering", + "type": "string" + }, + "object": { + "const": "group", + "description": "The Group object.", + "example": "group", + "type": "string" + }, + "organization_id": { + "description": "The ID of the Organization the Group belongs to.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "organization_id", + "name", + "description", + "created_at", + "updated_at" + ], + "type": "object" + }, + "GroupList": { + "properties": { + "data": { + "description": "The list of records for the current page.", + "items": { + "$ref": "#/components/schemas/Group" + }, + "type": "array" + }, + "list_metadata": { + "description": "Pagination cursors for navigating between pages of results.", + "properties": { + "after": { + "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": "group_01HXYZ987654321KJIHGFEDCBA", + "type": [ + "string", + "null" + ] + }, + "before": { + "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": "group_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "before", + "after" + ], + "type": "object" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "required": [ + "object", + "data", + "list_metadata" + ], + "type": "object" + }, + "GroupRoleAssignment": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "group_id": { + "description": "The ID of the group the role is assigned to.", + "example": "group_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "id": { + "description": "Unique identifier of the group role assignment.", + "example": "gra_01HXYZ123456789ABCDEFGH", + "type": "string" + }, + "object": { + "const": "group_role_assignment", + "description": "Distinguishes the group role assignment object.", + "type": "string" + }, + "resource": { + "description": "The resource the role is assigned on.", + "properties": { + "external_id": { + "description": "An identifier you provide to reference the resource in your system.", + "example": "proj-456", + "type": "string" + }, + "id": { + "description": "The unique ID of the Resource.", + "example": "authz_resource_01HXYZ123456789ABCDEFGH", + "type": "string" + }, + "resource_type_slug": { + "description": "The slug of the resource type this resource belongs to.", + "example": "project", + "type": "string" + } + }, + "required": [ + "id", + "external_id", + "resource_type_slug" + ], + "type": "object" + }, + "role": { + "$ref": "#/components/schemas/SlimRole", + "description": "The role included in the assignment." + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "group_id", + "role", + "resource", + "created_at", + "updated_at" + ], + "type": "object" + }, + "GroupRoleAssignmentList": { + "properties": { + "data": { + "description": "The list of records for the current page.", + "items": { + "$ref": "#/components/schemas/GroupRoleAssignment" + }, + "type": "array" + }, + "list_metadata": { + "description": "Pagination cursors for navigating between pages of results.", + "properties": { + "after": { + "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": "gra_01HXYZ987654321KJIHGFEDCBA", + "type": [ + "string", + "null" + ] + }, + "before": { + "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": "gra_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "before", + "after" + ], + "type": "object" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "required": [ + "object", + "data", + "list_metadata" + ], + "type": "object" + }, + "IntentOptions": { + "properties": { + "domain_verification": { + "$ref": "#/components/schemas/DomainVerificationIntentOptions", + "description": "Domain verification-specific options for the Admin Portal." + }, + "sso": { + "$ref": "#/components/schemas/SsoIntentOptions", + "description": "SSO-specific options for the Admin Portal." + } + }, + "type": "object" + }, + "JwksResponse": { + "properties": { + "keys": { + "description": "The public keys used for verifying access tokens.", + "items": { + "properties": { + "alg": { + "const": "RS256", + "description": "Algorithm.", + "type": "string" + }, + "e": { + "description": "RSA exponent.", + "example": "AQAB", + "type": "string" + }, + "kid": { + "description": "Key ID.", + "example": "key_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "kty": { + "const": "RSA", + "description": "Key type.", + "type": "string" + }, + "n": { + "description": "RSA modulus.", + "example": "0vx7agoebGc...eKnNs", + "type": "string" + }, + "use": { + "const": "sig", + "description": "Key use (signature).", + "type": "string" + }, + "x5c": { + "description": "X.509 certificate chain.", + "example": [ + "MIIDQjCCAiqgAwIBAgIGATz/FuLiMA0GCSqGSIb3DQEBCwUA..." + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "x5t#S256": { + "description": "X.509 certificate SHA-256 thumbprint.", + "example": "ZjQzYjI0OT...NmNjU0", + "type": "string" + } + }, + "required": [ + "alg", + "kty", + "use", + "x5c", + "n", + "e", + "kid", + "x5t#S256" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "keys" + ], + "type": "object" + }, + "JwtTemplate": { + "properties": { + "content": { + "description": "The JWT template content as a Liquid template string.", + "example": "{\"urn:myapp:full_name\": \"{{user.first_name}} {{user.last_name}}\", \"urn:myapp:email\": \"{{user.email}}\"}", + "type": "string" + }, + "created_at": { + "description": "The timestamp when the JWT template was created.", + "example": "2026-01-15T12:00:00.000Z", + "type": "string" + }, + "object": { + "const": "jwt_template", + "description": "The object type.", + "type": "string" + }, + "updated_at": { + "description": "The timestamp when the JWT template was last updated.", + "example": "2026-01-15T12:00:00.000Z", + "type": "string" + } + }, + "required": [ + "object", + "content", + "created_at", + "updated_at" + ], + "type": "object" + }, + "ListMetadata": { + "description": "Cursor-based pagination metadata.", + "properties": { + "after": { + "description": "Cursor for the next page of results.", + "example": "b21f3a8c-7e4d-4b1a-9c5e-2d8f6a7b3c4e", + "type": [ + "string", + "null" + ] + }, + "before": { + "description": "Cursor for the previous page of results.", + "example": "a10e2b7d-6c3f-4a2b-8d1e-3f9a5b8c7d6e", + "type": [ + "string", + "null" + ] + } + }, + "title": "ListMetadata", + "type": "object" + }, + "MagicAuth": { + "properties": { + "code": { + "description": "The code used to verify the Magic Auth code.", + "example": "123456", + "type": "string" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "email": { + "description": "The email address of the user.", + "example": "marcelina.davis@example.com", + "type": "string" + }, + "expires_at": { + "description": "The timestamp when the Magic Auth code expires.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "The unique ID of the Magic Auth code.", + "example": "magic_auth_01HWZBQZY2M3AMQW166Q22K88F", + "type": "string" + }, + "object": { + "const": "magic_auth", + "description": "Distinguishes the Magic Auth object.", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "user_id": { + "description": "The unique ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + "required": [ + "object", + "id", + "user_id", + "email", + "expires_at", + "created_at", + "updated_at", + "code" + ], + "type": "object" + }, + "NewConnectApplicationSecret": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "The unique ID of the client secret.", + "example": "secret_01J9Q2Z3X4Y5W6V7U8T9S0R1Q", + "type": "string" + }, + "last_used_at": { + "description": "The timestamp when the client secret was last used, or null if never used.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "object": { + "const": "connect_application_secret", + "description": "Distinguishes the connect application secret object.", + "type": "string" + }, + "secret": { + "description": "The plaintext secret value. Only returned at creation time and cannot be retrieved later.", + "example": "abc123def456ghi789jkl012mno345pqr678stu901vwx234yz", + "type": "string" + }, + "secret_hint": { + "description": "A hint showing the last few characters of the secret value.", + "example": "abc123", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "secret_hint", + "last_used_at", + "created_at", + "updated_at", + "secret" + ], + "type": "object" + }, + "Object": { + "description": "An encrypted object with its decrypted value and metadata.", + "properties": { + "id": { + "description": "Unique identifier of the object.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "type": "string" + }, + "metadata": { + "$ref": "#/components/schemas/ObjectMetadata" + }, + "name": { + "description": "Unique name of the object.", + "example": "my-secret", + "type": "string" + }, + "value": { + "description": "Decrypted plaintext value.", + "example": "s3cr3t-v4lu3", + "type": "string" + } + }, + "required": [ + "id", + "name", + "value", + "metadata" + ], + "title": "Object", + "type": "object" + }, + "ObjectListResponse": { + "properties": { + "data": { + "description": "List of object summaries.", + "items": { + "$ref": "#/components/schemas/ObjectSummary" + }, + "type": "array" + }, + "list_metadata": { + "$ref": "#/components/schemas/ListMetadata" + } + }, + "required": [ + "data", + "list_metadata" + ], + "title": "ObjectListResponse", + "type": "object" + }, + "ObjectMetadata": { + "description": "Metadata for a stored encrypted object.", + "properties": { + "context": { + "additionalProperties": { + "type": "string" + }, + "description": "Map of values used to determine the encryption key.", + "example": { + "organization_id": "org_01K8ZYT4AWJ6XP0E0S8CTBHE3P" + }, + "type": "object" + }, + "environment_id": { + "description": "Environment the object belongs to.", + "example": "environment_01K8ZYT4AWJ6XP0E0S8CTBHE3P", + "type": "string" + }, + "id": { + "description": "Unique identifier of the object.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "type": "string" + }, + "key_id": { + "description": "Encryption key identifier.", + "example": "bf65e326-43a0-4b20-88c4-07ff3de5434c", + "type": "string" + }, + "updated_at": { + "description": "Timestamp of the last update.", + "example": "2024-06-15T10:30:00Z", + "format": "date-time", + "type": "string" + }, + "updated_by": { + "$ref": "#/components/schemas/Actor" + }, + "version_id": { + "description": "Current version identifier of the object.", + "example": "c3d4e5f6-7890-abcd-ef12-34567890abcd", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "environment_id", + "key_id", + "updated_by", + "updated_at", + "context" + ], + "title": "ObjectMetadata", + "type": "object" + }, + "ObjectSummary": { + "description": "Summary of an encrypted object returned in list responses.", + "properties": { + "id": { + "description": "Unique identifier of the object.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "type": "string" + }, + "name": { + "description": "Unique name of the object.", + "example": "my-secret", + "type": "string" + }, + "updated_at": { + "description": "Timestamp of the last update.", + "example": "2024-06-15T10:30:00Z", + "format": "date-time", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "name" + ], + "title": "ObjectSummary", + "type": "object" + }, + "ObjectVersion": { + "description": "A static snapshot of an encrypted object.", + "properties": { + "created_at": { + "description": "Timestamp when the version was created.", + "example": "2024-06-15T10:30:00Z", + "format": "date-time", + "type": "string" + }, + "current_version": { + "description": "Whether this is the active version.", + "example": true, + "type": "boolean" + }, + "etag": { + "description": "Hash of the object value.", + "example": "d41d8cd98f00b204e9800998ecf8427e", + "type": "string" + }, + "id": { + "description": "Unique identifier of the version.", + "example": "c3d4e5f6-7890-abcd-ef12-34567890abcd", + "type": "string" + }, + "size": { + "description": "Number of bytes of stored data.", + "example": 256, + "type": "integer" + } + }, + "required": [ + "id", + "created_at", + "current_version", + "size", + "etag" + ], + "title": "ObjectVersion", + "type": "object" + }, + "ObjectWithoutValue": { + "description": "An encrypted object's metadata (value excluded).", + "properties": { + "id": { + "description": "Unique identifier of the object.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "type": "string" + }, + "metadata": { + "$ref": "#/components/schemas/ObjectMetadata" + }, + "name": { + "description": "Unique name of the object.", + "example": "my-secret", + "type": "string" + } + }, + "required": [ + "id", + "name", + "metadata" + ], + "title": "ObjectWithoutValue", + "type": "object" + }, + "Organization": { + "properties": { + "allow_profiles_outside_organization": { + "deprecated": true, + "description": "Whether the Organization allows profiles outside of its managed domains.", + "example": false, + "type": "boolean" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "domains": { + "description": "List of Organization Domains.", + "items": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "domain": { + "description": "Domain for the organization domain.", + "example": "foo-corp.com", + "type": "string" + }, + "id": { + "description": "Unique identifier of the organization domain.", + "example": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", + "type": "string" + }, + "object": { + "const": "organization_domain", + "description": "Distinguishes the organization domain object.", + "type": "string" + }, + "organization_id": { + "description": "ID of the parent Organization.", + "example": "org_01HE8GSH8FQPASKSY27THRKRBP", + "type": "string" + }, + "state": { + "description": "Verification state of the domain.", + "enum": [ + "failed", + "legacy_verified", + "pending", + "unverified", + "verified" + ], + "example": "pending", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "verification_prefix": { + "description": "The prefix used in DNS verification.", + "example": "superapp-domain-verification-z3kjny", + "type": "string" + }, + "verification_strategy": { + "description": "Strategy used to verify the domain.", + "enum": [ + "dns", + "manual" + ], + "example": "dns", + "type": "string" + }, + "verification_token": { + "description": "Validation token to be used in DNS TXT record.", + "example": "m5Oztg3jdK4NJLgs8uIlIprMw", + "type": "string" + } + }, + "required": [ + "object", + "id", + "organization_id", + "domain", + "created_at", + "updated_at" + ], + "type": "object" + }, + "type": "array" + }, + "external_id": { + "description": "The external ID of the Organization.", + "example": "2fe01467-f7ea-4dd2-8b79-c2b4f56d0191", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier of the Organization.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + }, + "metadata": { + "additionalProperties": { + "maxLength": 600, + "type": "string" + }, + "description": "Object containing [metadata](/authkit/metadata) key/value pairs associated with the Organization.", + "example": { + "tier": "diamond" + }, + "maxProperties": 50, + "propertyNames": { + "maxLength": 40 + }, + "type": "object" + }, + "name": { + "description": "A descriptive name for the Organization. This field does not need to be unique.", + "example": "Acme Inc.", + "type": "string" + }, + "object": { + "const": "organization", + "description": "Distinguishes the Organization object.", + "type": "string" + }, + "stripe_customer_id": { + "description": "The Stripe customer ID of the Organization.", + "example": "cus_R9qWAGMQ6nGE7V", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "name", + "domains", + "metadata", + "external_id", + "created_at", + "updated_at" + ], + "type": "object" + }, + "OrganizationApiKey": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "expires_at": { + "description": "Timestamp when the API Key expires. Null means the key does not expire.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier of the API Key.", + "example": "api_key_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "last_used_at": { + "description": "Timestamp of when the API Key was last used.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "A descriptive name for the API Key.", + "example": "Production API Key", + "type": "string" + }, + "obfuscated_value": { + "description": "An obfuscated representation of the API Key value.", + "example": "sk_...3456", + "type": "string" + }, + "object": { + "const": "api_key", + "description": "Distinguishes the API Key object.", + "type": "string" + }, + "owner": { + "description": "The entity that owns the API Key.", + "properties": { + "id": { + "description": "Unique identifier of the API Key owner.", + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "type": { + "const": "organization", + "description": "The type of the API Key owner.", + "example": "organization", + "type": "string" + } + }, + "required": [ + "type", + "id" + ], + "type": "object" + }, + "permissions": { + "description": "The permission slugs assigned to the API Key.", + "example": [ + "posts:read", + "posts:write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "owner", + "name", + "obfuscated_value", + "last_used_at", + "expires_at", + "permissions", + "created_at", + "updated_at" + ], + "type": "object" + }, + "OrganizationApiKeyList": { + "properties": { + "data": { + "description": "The list of records for the current page.", + "items": { + "$ref": "#/components/schemas/OrganizationApiKey" + }, + "type": "array" + }, + "list_metadata": { + "description": "Pagination cursors for navigating between pages of results.", + "properties": { + "after": { + "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": "api_key_01HXYZ987654321KJIHGFEDCBA", + "type": [ + "string", + "null" + ] + }, + "before": { + "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": "api_key_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "before", + "after" + ], + "type": "object" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "required": [ + "object", + "data", + "list_metadata" + ], + "type": "object" + }, + "OrganizationApiKeyWithValue": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "expires_at": { + "description": "Timestamp when the API Key expires. Null means the key does not expire.", + "example": "2030-01-01T00:00:00.000Z", + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier of the API Key.", + "example": "api_key_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "last_used_at": { + "description": "Timestamp of when the API Key was last used.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "A descriptive name for the API Key.", + "example": "Production API Key", + "type": "string" + }, + "obfuscated_value": { + "description": "An obfuscated representation of the API Key value.", + "example": "sk_...3456", + "type": "string" + }, + "object": { + "const": "api_key", + "description": "Distinguishes the API Key object.", + "type": "string" + }, + "owner": { + "description": "The entity that owns the API Key.", + "properties": { + "id": { + "description": "Unique identifier of the API Key owner.", + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "type": { + "const": "organization", + "description": "The type of the API Key owner.", + "example": "organization", + "type": "string" + } + }, + "required": [ + "type", + "id" + ], + "type": "object" + }, + "permissions": { + "description": "The permission slugs assigned to the API Key.", + "example": [ + "posts:read", + "posts:write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "value": { + "description": "The full API Key value. Only returned once at creation time.", + "example": "sk_abcdefghijklmnop123456", + "type": "string" + } + }, + "required": [ + "object", + "id", + "owner", + "name", + "obfuscated_value", + "last_used_at", + "expires_at", + "permissions", + "created_at", + "updated_at", + "value" + ], + "type": "object" + }, + "OrganizationDomainDataDto": { + "properties": { + "domain": { + "description": "The domain value.", + "example": "foo-corp.com", + "type": "string" + }, + "state": { + "description": "The verification state of the domain.", + "enum": [ + "pending", + "verified" + ], + "example": "verified", + "type": "string" + } + }, + "required": [ + "domain", + "state" + ], + "type": "object" + }, + "OrganizationDomainStandAlone": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "domain": { + "description": "Domain for the organization domain.", + "example": "foo-corp.com", + "type": "string" + }, + "id": { + "description": "Unique identifier of the organization domain.", + "example": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", + "type": "string" + }, + "object": { + "const": "organization_domain", + "description": "Distinguishes the organization domain object.", + "type": "string" + }, + "organization_id": { + "description": "ID of the parent Organization.", + "example": "org_01HE8GSH8FQPASKSY27THRKRBP", + "type": "string" + }, + "state": { + "description": "Verification state of the domain.", + "enum": [ + "failed", + "legacy_verified", + "pending", + "unverified", + "verified" + ], + "example": "pending", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "verification_prefix": { + "description": "The prefix used in DNS verification.", + "example": "superapp-domain-verification-z3kjny", + "type": "string" + }, + "verification_strategy": { + "description": "Strategy used to verify the domain.", + "enum": [ + "dns", + "manual" + ], + "example": "dns", + "type": "string" + }, + "verification_token": { + "description": "Validation token to be used in DNS TXT record.", + "example": "m5Oztg3jdK4NJLgs8uIlIprMw", + "type": "string" + } + }, + "required": [ + "object", + "id", + "organization_id", + "domain", + "created_at", + "updated_at" + ], + "type": "object" + }, + "OrganizationDto": { + "properties": { + "allow_profiles_outside_organization": { + "description": "Whether the organization allows profiles from outside the organization to sign in.", + "example": false, + "type": "boolean" + }, + "domain_data": { + "description": "The domains associated with the organization, including verification state.", + "items": { + "$ref": "#/components/schemas/OrganizationDomainDataDto" + }, + "type": "array" + }, + "domains": { + "description": "The domains associated with the organization. Deprecated in favor of `domain_data`.", + "example": [ + "example.com" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "external_id": { + "description": "An external identifier for the Organization.", + "example": "ext_12345", + "maxLength": 128, + "pattern": "^[\\x00-\\x7F]+$", + "type": [ + "string", + "null" + ] + }, + "metadata": { + "additionalProperties": { + "maxLength": 600, + "type": "string" + }, + "description": "Object containing [metadata](/authkit/metadata) key/value pairs associated with the Organization.", + "example": { + "tier": "diamond" + }, + "maxProperties": 50, + "propertyNames": { + "maxLength": 40 + }, + "type": [ + "object", + "null" + ] + }, + "name": { + "description": "The name of the organization.", + "example": "Foo Corp", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "OrganizationList": { + "properties": { + "data": { + "description": "The list of records for the current page.", + "items": { + "$ref": "#/components/schemas/Organization" + }, + "type": "array" + }, + "list_metadata": { + "description": "Pagination cursors for navigating between pages of results.", + "properties": { + "after": { + "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": "org_01HXYZ987654321KJIHGFEDCBA", + "type": [ + "string", + "null" + ] + }, + "before": { + "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": "org_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "before", + "after" + ], + "type": "object" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "required": [ + "object", + "data", + "list_metadata", + "list_metadata" + ], + "type": "object" + }, + "PaginationOrder": { + "default": "desc", + "enum": [ + "normal", + "desc", + "asc" + ], + "example": "desc", + "type": "string" + }, + "PasswordReset": { + "properties": { + "created_at": { + "description": "The timestamp when the password reset token was created.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "email": { + "description": "The email address of the user.", + "example": "marcelina.davis@example.com", + "type": "string" + }, + "expires_at": { + "description": "The timestamp when the password reset token expires.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "The unique ID of the password reset object.", + "example": "password_reset_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + }, + "object": { + "const": "password_reset", + "description": "Distinguishes the password reset object.", + "type": "string" + }, + "password_reset_token": { + "description": "The token used to reset the password.", + "example": "Z1uX3RbwcIl5fIGJJJCXXisdI", + "type": "string" + }, + "password_reset_url": { + "description": "The URL where the user can reset their password.", + "example": "https://your-app.com/reset-password?token=Z1uX3RbwcIl5fIGJJJCXXisdI", + "type": "string" + }, + "user_id": { + "description": "The unique ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + "required": [ + "object", + "id", + "user_id", + "email", + "expires_at", + "created_at", + "password_reset_token", + "password_reset_url" + ], + "type": "object" + }, + "PipesConnectedAccount": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "data_integration_id": { + "description": "The unique ID of the data integration.", + "example": "data_integration_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "id": { + "description": "The unique ID of the connected account.", + "example": "data_installation_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "connected_account", + "description": "The connected account object.", + "example": "connected_account", + "type": "string" + }, + "organization_id": { + "description": "The ID of the Organization the connected account belongs to.", + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": [ + "string", + "null" + ] + }, + "provider_slug": { + "description": "The provider slug for this connected account.", + "example": "github", + "type": "string" + }, + "scopes": { + "description": "The OAuth scopes granted for this connected account.", + "example": [ + "repo", + "user:email" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "state": { + "description": "The state of the connected account.", + "enum": [ + "connected", + "needs_reauthorization" + ], + "example": "connected", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "user_id": { + "description": "The ID of the User the connected account belongs to.", + "example": "user_01EHZNVPK3SFK441A1RGBFSHRT", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "object", + "id", + "data_integration_id", + "provider_slug", + "user_id", + "organization_id", + "scopes", + "state", + "created_at", + "updated_at" + ], + "type": "object" + }, + "PortalLinkResponse": { + "properties": { + "link": { + "description": "An ephemeral link to initiate the Admin Portal.", + "example": "https://setup.workos.com?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", + "type": "string" + } + }, + "required": [ + "link" + ], + "type": "object" + }, + "Profile": { + "properties": { + "connection_id": { + "description": "The ID of the SSO connection used for authentication.", + "example": "conn_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + }, + "connection_type": { + "description": "The type of SSO connection.", + "enum": [ + "Pending", + "ADFSSAML", + "AdpOidc", + "AppleOAuth", + "Auth0Migration", + "Auth0SAML", + "AzureSAML", + "BitbucketOAuth", + "CasSAML", + "ClassLinkSAML", + "CleverOIDC", + "CloudflareSAML", + "CyberArkSAML", + "DiscordOAuth", + "DuoSAML", + "EntraIdOIDC", + "GenericOIDC", + "GenericSAML", + "GitHubOAuth", + "GitLabOAuth", + "GoogleOAuth", + "GoogleOIDC", + "GoogleSAML", + "IntuitOAuth", + "JumpCloudSAML", + "KeycloakSAML", + "LastPassSAML", + "LinkedInOAuth", + "LoginGovOidc", + "MagicLink", + "MicrosoftOAuth", + "MiniOrangeSAML", + "NetIqSAML", + "OktaOIDC", + "OktaSAML", + "OneLoginSAML", + "OracleSAML", + "PingFederateSAML", + "PingOneSAML", + "RipplingSAML", + "SalesforceSAML", + "ShibbolethGenericSAML", + "ShibbolethSAML", + "SimpleSamlPhpSAML", + "SalesforceOAuth", + "SlackOAuth", + "TestIdp", + "VercelMarketplaceOAuth", + "VercelOAuth", + "VMwareSAML", + "XeroOAuth" + ], + "example": "OktaSAML", + "type": "string" + }, + "custom_attributes": { + "additionalProperties": {}, + "description": "Custom attribute mappings defined for the connection, returned as key-value pairs.", + "type": "object" + }, + "email": { + "description": "The user's email address.", + "example": "todd@example.com", + "type": "string" + }, + "first_name": { + "description": "The user's first name.", + "example": "Todd", + "type": [ + "string", + "null" + ] + }, + "groups": { + "description": "The groups the user belongs to, as returned by the identity provider.", + "example": [ + "Engineering", + "Admins" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "description": "Unique identifier of the profile.", + "example": "prof_01DMC79VCBZ0NY2099737PSVF1", + "type": "string" + }, + "idp_id": { + "description": "The user's unique identifier from the identity provider.", + "example": "103456789012345678901", + "type": "string" + }, + "last_name": { + "description": "The user's last name.", + "example": "Rundgren", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The user's full name.", + "example": "Todd Rundgren", + "type": [ + "string", + "null" + ] + }, + "object": { + "const": "profile", + "description": "Distinguishes the profile object.", + "example": "profile", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization the user belongs to.", + "example": "org_01EHQMYV6MBK39QC5PZXHY59C3", + "type": [ + "string", + "null" + ] + }, + "raw_attributes": { + "additionalProperties": {}, + "description": "The complete set of raw attributes returned by the identity provider.", + "type": "object" + }, + "role": { + "description": "The role assigned to the user within the organization, if applicable.", + "oneOf": [ + { + "$ref": "#/components/schemas/SlimRole" + }, + { + "type": "null" + } + ] + }, + "roles": { + "description": "The roles assigned to the user within the organization, if applicable.", + "oneOf": [ + { + "items": { + "$ref": "#/components/schemas/SlimRole" + }, + "type": "array" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "object", + "id", + "organization_id", + "connection_id", + "connection_type", + "idp_id", + "email", + "first_name", + "last_name", + "name", + "raw_attributes" + ], + "type": "object" + }, + "RadarListEntryAlreadyPresentResponse": { + "properties": { + "message": { + "description": "A message indicating the entry already exists.", + "example": "Entry already present in list", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + }, + "RadarStandaloneResponse": { + "properties": { + "attempt_id": { + "description": "Unique identifier of the authentication attempt.", + "example": "radar_att_01HZBC6N1EB1ZY7KG32X", + "type": "string" + }, + "blocklist_type": { + "description": "The type of blocklist entry that triggered the verdict. Only present if the control is `restriction`.", + "enum": [ + "ip_address", + "domain", + "email", + "device", + "user_agent", + "device_fingerprint", + "country" + ], + "example": "ip_address", + "type": "string" + }, + "control": { + "description": "The Radar control that triggered the verdict. Only present if the verdict is `block` or `challenge`.", + "enum": [ + "bot_detection", + "brute_force_attack", + "impossible_travel", + "repeat_sign_up", + "stale_account", + "unrecognized_device", + "restriction" + ], + "example": "bot_detection", + "type": "string" + }, + "reason": { + "description": "A human-readable reason for the verdict.", + "example": "Detected enabled Radar control", + "type": "string" + }, + "verdict": { + "description": "The verdict of the risk assessment.", + "enum": [ + "allow", + "block", + "challenge" + ], + "example": "block", + "type": "string" + } + }, + "required": [ + "verdict", + "reason", + "attempt_id" + ], + "type": "object" + }, + "RedirectUri": { + "properties": { + "created_at": { + "description": "The timestamp when the redirect URI was created.", + "example": "2026-01-15T12:00:00.000Z", + "type": "string" + }, + "default": { + "description": "Whether this is the default redirect URI.", + "example": true, + "type": "boolean" + }, + "id": { + "description": "The ID of the redirect URI.", + "example": "ruri_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "object": { + "const": "redirect_uri", + "description": "The object type.", + "type": "string" + }, + "updated_at": { + "description": "The timestamp when the redirect URI was last updated.", + "example": "2026-01-15T12:00:00.000Z", + "type": "string" + }, + "uri": { + "description": "The redirect URI.", + "example": "https://example.com/callback", + "type": "string" + } + }, + "required": [ + "object", + "id", + "uri", + "default", + "created_at", + "updated_at" + ], + "type": "object" + }, + "RedirectUriDto": { + "properties": { + "default": { + "description": "Whether this is the default redirect URI.", + "example": true, + "type": [ + "boolean", + "null" + ] + }, + "uri": { + "description": "The redirect URI.", + "example": "https://example.com/callback", + "type": "string" + } + }, + "required": [ + "uri" + ], + "type": "object" + }, + "RekeyRequest": { + "properties": { + "context": { + "additionalProperties": { + "maxLength": 500, + "type": "string" + }, + "description": "Map of values used to determine the new encryption key.", + "example": { + "organization_id": "org_01K8ZYT4AWJ6XP0E0S8CTBHE3P" + }, + "maxProperties": 10, + "type": "object" + }, + "encrypted_keys": { + "description": "Base64-encoded encrypted data key blob to re-encrypt.", + "example": "V09TLkVLTS52MQBiZjUxY2NlYy03OGI0LTUyMDAtYjM4My0zNTczMGU3MWVmNjEBATEBJGJmNjVlMzI2LTQzYTAtNGIyMC04OGM0LTA3ZmYzZGU1NDM0YwF0YmY2NWUzMjYtNDNhMC00YjIwLTg4YzQtMDdmZjNkZTU0MzRj", + "type": "string" + } + }, + "required": [ + "encrypted_keys", + "context" + ], + "title": "RekeyRequest", + "type": "object" + }, + "RemoveRoleDto": { + "allOf": [ + { + "properties": { + "role_slug": { + "description": "The slug of the role to remove.", + "example": "editor", + "type": "string" + } + }, + "required": [ + "role_slug" + ], + "type": "object" + }, + { + "oneOf": [ + { + "not": { + "anyOf": [ + { + "properties": { + "resource_external_id": { + "x-exclude-from-lint": true + } + }, + "required": [ + "resource_external_id" + ] + }, + { + "properties": { + "resource_type_slug": { + "x-exclude-from-lint": true + } + }, + "required": [ + "resource_type_slug" + ] + } + ] + }, + "properties": { + "resource_id": { + "description": "The ID of the resource. Mutually exclusive with `resource_external_id` and `resource_type_slug`.", + "example": "authz_resource_01HXYZ123456789ABCDEFGH", + "type": "string" + } + }, + "required": [ + "resource_id" + ], + "type": "object" + }, + { + "not": { + "anyOf": [ + { + "properties": { + "resource_id": { + "x-exclude-from-lint": true + } + }, + "required": [ + "resource_id" + ] + } + ] + }, + "properties": { + "resource_external_id": { + "description": "The external ID of the resource. Required with `resource_type_slug`. Mutually exclusive with `resource_id`.", + "example": "external_01HXYZ123456789ABCDEFGH", + "type": "string" + }, + "resource_type_slug": { + "description": "The resource type slug. Required with `resource_external_id`. Mutually exclusive with `resource_id`.", + "example": "project", + "type": "string" + } + }, + "required": [ + "resource_external_id", + "resource_type_slug" + ], + "type": "object" + } + ] + } + ], + "x-mutually-exclusive-body-groups": { + "resource_target": { + "optional": false, + "variants": { + "by_external_id": [ + "resource_external_id", + "resource_type_slug" + ], + "by_id": [ + "resource_id" + ] + } + } + } + }, + "ReplaceGroupRoleAssignmentEntryDto": { + "properties": { + "resource_external_id": { + "description": "The external ID of the resource.", + "example": "proj-456", + "type": "string" + }, + "resource_id": { + "description": "The ID of the resource. Omit along with the external-id fields to target the organization itself.", + "example": "authz_resource_01HXYZ123456789ABCDEFGH", + "type": "string" + }, + "resource_type_slug": { + "description": "The resource type slug.", + "example": "project", + "type": "string" + }, + "role_slug": { + "description": "The slug of the role to assign to the group.", + "example": "admin", + "type": "string" + } + }, + "required": [ + "role_slug" + ], + "type": "object" + }, + "ReplaceGroupRoleAssignmentsDto": { + "properties": { + "role_assignments": { + "description": "The list of role assignments that should exist for the group. All existing assignments will be replaced.", + "items": { + "$ref": "#/components/schemas/ReplaceGroupRoleAssignmentEntryDto" + }, + "maxItems": 100, + "type": "array" + } + }, + "required": [ + "role_assignments" + ], + "type": "object" + }, + "ResendUserlandUserInviteOptionsDto": { + "properties": { + "locale": { + "description": "The locale to use when rendering the invitation email. See [supported locales](/authkit/hosted-ui/localization).", + "enum": [ + "af", + "am", + "ar", + "bg", + "bn", + "bs", + "ca", + "cs", + "da", + "de", + "de-DE", + "el", + "en", + "en-AU", + "en-CA", + "en-GB", + "en-US", + "es", + "es-419", + "es-ES", + "es-US", + "et", + "fa", + "fi", + "fil", + "fr", + "fr-BE", + "fr-CA", + "fr-FR", + "fy", + "gl", + "gu", + "ha", + "he", + "hi", + "hr", + "hu", + "hy", + "id", + "is", + "it", + "it-IT", + "ja", + "jv", + "ka", + "kk", + "km", + "kn", + "ko", + "lt", + "lv", + "mk", + "ml", + "mn", + "mr", + "ms", + "my", + "nb", + "ne", + "nl", + "nl-BE", + "nl-NL", + "nn", + "no", + "pa", + "pl", + "pt", + "pt-BR", + "pt-PT", + "ro", + "ru", + "sk", + "sl", + "sq", + "sr", + "sv", + "sw", + "ta", + "te", + "th", + "tr", + "uk", + "ur", + "uz", + "vi", + "zh", + "zh-CN", + "zh-HK", + "zh-TW", + "zu" + ], + "example": "en", + "type": "string" + } + }, + "type": "object" + }, + "ResetPasswordResponse": { + "properties": { + "user": { + "$ref": "#/components/schemas/UserlandUser", + "description": "The user whose password was reset." + } + }, + "required": [ + "user" + ], + "type": "object" + }, + "Role": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "An optional description of the role.", + "example": "Can manage all resources", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier of the role.", + "example": "role_01EHQMYV6MBK39QC5PZXHY59C3", + "type": "string" + }, + "name": { + "description": "A descriptive name for the role.", + "example": "Admin", + "type": "string" + }, + "object": { + "const": "role", + "description": "Distinguishes the role object.", + "example": "role", + "type": "string" + }, + "permissions": { + "description": "The permission slugs assigned to the role.", + "example": [ + "posts:read", + "posts:write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "resource_type_slug": { + "description": "The slug of the resource type the role is scoped to.", + "example": "organization", + "type": "string" + }, + "slug": { + "description": "A unique slug for the role.", + "example": "admin", + "type": "string" + }, + "type": { + "description": "Whether the role is scoped to the environment or an organization (custom role).", + "enum": [ + "EnvironmentRole", + "OrganizationRole" + ], + "example": "EnvironmentRole", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "slug", + "object", + "id", + "name", + "description", + "type", + "resource_type_slug", + "permissions", + "created_at", + "updated_at" + ], + "type": "object" + }, + "RoleList": { + "properties": { + "data": { + "description": "The list of records for the current page.", + "items": { + "$ref": "#/components/schemas/Role" + }, + "type": "array" + }, + "object": { + "const": "list", + "example": "list", + "type": "string" + } + }, + "required": [ + "object", + "data" + ], + "type": "object" + }, + "SendEmailChangeDto": { + "properties": { + "new_email": { + "description": "The new email address to change to.", + "example": "new.email@example.com", + "type": "string" + } + }, + "required": [ + "new_email" + ], + "type": "object" + }, + "SendVerificationEmailResponse": { + "properties": { + "user": { + "$ref": "#/components/schemas/UserlandUser", + "description": "The user to whom the verification email was sent." + } + }, + "required": [ + "user" + ], + "type": "object" + }, + "SetRolePermissionsDto": { + "properties": { + "permissions": { + "description": "The permission slugs to assign to the role.", + "example": [ + "billing:read", + "billing:write", + "invoices:manage", + "reports:view" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "permissions" + ], + "type": "object" + }, + "SlimRole": { + "description": "The primary role assigned to the user.", + "properties": { + "slug": { + "description": "The slug of the assigned role.", + "example": "admin", + "type": "string" + } + }, + "required": [ + "slug" + ], + "type": "object" + }, + "SsoAuthorizeUrlResponse": { + "properties": { + "url": { + "description": "An OAuth 2.0 authorization URL.", + "example": "https://accounts.google.com/o/oauth2/v2/auth?client_id=example&redirect_uri=https%3A%2F%2Fapi.workos.com%2Fsso%2Fcallback&response_type=code&scope=openid%20profile%20email", + "format": "uri", + "type": "string" + } + }, + "required": [ + "url" + ], + "type": "object" + }, + "SsoIntentOptions": { + "properties": { + "bookmark_slug": { + "description": "The bookmark slug to use for SSO.", + "example": "chatgpt", + "type": "string" + }, + "provider_type": { + "const": "GoogleSAML", + "description": "The SSO provider type to configure.", + "example": "GoogleSAML", + "type": "string" + } + }, + "type": "object" + }, + "SsoLogoutAuthorizeResponse": { + "properties": { + "logout_token": { + "description": "The logout token to be used in the [Logout Redirect](/reference/sso/logout) endpoint.", + "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwcm9maWxlX2lkIjoicHJvZl8wMUdXUTFHMEgyRk02QVNFRjBIUzEzSENXOS0zMDRrZzAzZyIsImV4cCI6IjE1MTYyMzkwMjIifQ.Wru9Qlnf5DpohtGCKhZU4cVOd3zpiu7QQ-XEX--5A_4", + "type": "string" + }, + "logout_url": { + "description": "The URL to redirect the user to in order to log out ([Logout Redirect](/reference/sso/logout) endpoint ready to use).", + "example": "https://auth.workos.com/sso/logout?token=eyJhbGciOiJSUzI1NiJ9", + "type": "string" + } + }, + "required": [ + "logout_url", + "logout_token" + ], + "type": "object" + }, + "SsoTokenResponse": { + "properties": { + "access_token": { + "description": "An access token that can be exchanged for a user profile. Access tokens are short-lived \u2014 see the `expires_in` field for the exact lifetime.", + "example": "eyJhbGciOiJSUzI1NiIsImtpZCI6InNzby...", + "type": "string" + }, + "expires_in": { + "description": "The lifetime of the access token in seconds.", + "example": 600, + "type": "integer" + }, + "oauth_tokens": { + "description": "OAuth tokens issued by the identity provider, if available.", + "properties": { + "access_token": { + "description": "The access token from the OAuth provider.", + "example": "ya29.a0ARrdaM...", + "type": "string" + }, + "expires_at": { + "description": "The timestamp at which the access token expires.", + "example": 1735141800, + "type": "integer" + }, + "provider": { + "description": "The OAuth provider used for authentication.", + "example": "GoogleOAuth", + "type": "string" + }, + "refresh_token": { + "description": "The refresh token from the OAuth provider.", + "example": "1//04g...", + "type": "string" + }, + "scopes": { + "description": "A list of OAuth scopes for which the access token is authorized.", + "example": [ + "profile", + "email", + "openid" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "provider", + "refresh_token", + "access_token", + "expires_at", + "scopes" + ], + "type": "object" + }, + "profile": { + "$ref": "#/components/schemas/Profile", + "description": "The user profile returned by the identity provider." + }, + "token_type": { + "const": "Bearer", + "description": "The type of token issued.", + "type": "string" + } + }, + "required": [ + "token_type", + "access_token", + "expires_in", + "profile" + ], + "type": "object" + }, + "TokenQueryDto": { + "properties": { + "client_id": { + "description": "The client ID of the WorkOS environment.", + "example": "client_01HZBC6N1EB1ZY7KG32X", + "type": "string" + }, + "client_secret": { + "description": "The client secret of the WorkOS environment.", + "example": "sk_example_123456789", + "type": "string" + }, + "code": { + "description": "The authorization code received from the authorization callback.", + "example": "authorization_code_value", + "type": "string" + }, + "grant_type": { + "const": "authorization_code", + "description": "The grant type for the token request.", + "example": "authorization_code", + "type": "string" + } + }, + "required": [ + "client_id", + "client_secret", + "code", + "grant_type" + ], + "type": "object" + }, + "UpdateAuditLogsRetentionDto": { + "properties": { + "retention_period_in_days": { + "description": "The number of days Audit Log events will be retained. Valid values are `30` and `365`.", + "example": 30, + "type": "integer" + } + }, + "required": [ + "retention_period_in_days" + ], + "type": "object" + }, + "UpdateAuthorizationPermissionDto": { + "properties": { + "description": { + "description": "An optional description of the Permission.", + "example": "Allows viewing document contents", + "maxLength": 150, + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "A descriptive name for the Permission.", + "example": "View Documents", + "maxLength": 48, + "type": "string" + } + }, + "type": "object" + }, + "UpdateAuthorizationResourceDto": { + "allOf": [ + { + "properties": { + "description": { + "description": "An optional description of the resource.", + "example": "Updated description", + "maxLength": 150, + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "A display name for the resource.", + "example": "Updated Name", + "maxLength": 48, + "type": "string" + } + }, + "type": "object" + }, + { + "oneOf": [ + { + "not": { + "anyOf": [ + { + "properties": { + "parent_resource_id": { + "x-exclude-from-lint": true + } + }, + "required": [ + "parent_resource_id" + ] + }, + { + "properties": { + "parent_resource_external_id": { + "x-exclude-from-lint": true + } + }, + "required": [ + "parent_resource_external_id" + ] + }, + { + "properties": { + "parent_resource_type_slug": { + "x-exclude-from-lint": true + } + }, + "required": [ + "parent_resource_type_slug" + ] + } + ] + }, + "type": "object" + }, + { + "not": { + "anyOf": [ + { + "properties": { + "parent_resource_external_id": { + "x-exclude-from-lint": true + } + }, + "required": [ + "parent_resource_external_id" + ] + }, + { + "properties": { + "parent_resource_type_slug": { + "x-exclude-from-lint": true + } + }, + "required": [ + "parent_resource_type_slug" + ] + } + ] + }, + "properties": { + "parent_resource_id": { + "description": "The ID of the parent resource. Mutually exclusive with `parent_resource_external_id` and `parent_resource_type_slug`.", + "example": "authz_resource_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + "required": [ + "parent_resource_id" + ], + "type": "object" + }, + { + "not": { + "anyOf": [ + { + "properties": { + "parent_resource_id": { + "x-exclude-from-lint": true + } + }, + "required": [ + "parent_resource_id" + ] + } + ] + }, + "properties": { + "parent_resource_external_id": { + "description": "The external ID of the parent resource. Required with `parent_resource_type_slug`. Mutually exclusive with `parent_resource_id`.", + "example": "parent-workspace-01", + "type": "string" + }, + "parent_resource_type_slug": { + "description": "The resource type slug of the parent resource. Required with `parent_resource_external_id`. Mutually exclusive with `parent_resource_id`.", + "example": "workspace", + "type": "string" + } + }, + "required": [ + "parent_resource_external_id", + "parent_resource_type_slug" + ], + "type": "object" + } + ] + } + ], + "x-mutually-exclusive-body-groups": { + "parent_resource": { + "optional": true, + "variants": { + "by_external_id": [ + "parent_resource_external_id", + "parent_resource_type_slug" + ], + "by_id": [ + "parent_resource_id" + ] + } + } + } + }, + "UpdateGroupDto": { + "properties": { + "description": { + "description": "An optional description of the Group.", + "example": "The engineering team", + "maxLength": 150, + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The name of the Group.", + "example": "Engineering", + "maxLength": 256, + "type": "string" + } + }, + "type": "object" + }, + "UpdateJwtTemplateDto": { + "properties": { + "content": { + "description": "The JWT template content as a Liquid template string.", + "example": "{\"urn:myapp:full_name\": \"{{user.first_name}} {{user.last_name}}\", \"urn:myapp:email\": \"{{user.email}}\"}", + "type": "string" + } + }, + "required": [ + "content" + ], + "type": "object" + }, + "UpdateOAuthApplicationDto": { + "properties": { + "description": { + "description": "A description for the application.", + "example": "An application for managing user access", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The name of the application.", + "example": "My Application", + "type": "string" + }, + "redirect_uris": { + "description": "Updated redirect URIs for the application. OAuth applications only.", + "example": [ + { + "default": true, + "uri": "https://example.com/callback" + } + ], + "items": { + "$ref": "#/components/schemas/RedirectUriDto" + }, + "type": [ + "array", + "null" + ] + }, + "scopes": { + "description": "The OAuth scopes granted to the application.", + "example": [ + "openid", + "profile", + "email" + ], + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + } + }, + "type": "object" + }, + "UpdateObjectRequest": { + "properties": { + "value": { + "description": "New plaintext value.", + "example": "upd4t3d-v4lu3", + "type": "string" + }, + "version_check": { + "description": "ID of the expected current version for optimistic locking.", + "example": "c3d4e5f6-7890-abcd-ef12-34567890abcd", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "value" + ], + "title": "UpdateObjectRequest", + "type": "object" + }, + "UpdateOrganizationDto": { + "properties": { + "allow_profiles_outside_organization": { + "description": "Whether the organization allows profiles from outside the organization to sign in.", + "example": false, + "type": "boolean" + }, + "domain_data": { + "description": "The domains associated with the organization, including verification state.", + "items": { + "$ref": "#/components/schemas/OrganizationDomainDataDto" + }, + "type": "array" + }, + "domains": { + "deprecated": true, + "description": "The domains associated with the organization. Deprecated in favor of `domain_data`.", + "example": [ + "foo-corp.com" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "external_id": { + "description": "An external identifier for the Organization.", + "example": "2fe01467-f7ea-4dd2-8b79-c2b4f56d0191", + "maxLength": 128, + "pattern": "^[\\x00-\\x7F]+$", + "type": [ + "string", + "null" + ] + }, + "metadata": { + "additionalProperties": { + "maxLength": 600, + "type": "string" + }, + "description": "Object containing [metadata](/authkit/metadata) key/value pairs associated with the Organization.", + "example": { + "tier": "diamond" + }, + "maxProperties": 50, + "propertyNames": { + "maxLength": 40 + }, + "type": [ + "object", + "null" + ] + }, + "name": { + "description": "The name of the organization.", + "example": "Foo Corp", + "type": "string" + }, + "stripe_customer_id": { + "description": "The Stripe customer ID associated with the organization.", + "example": "cus_R9qWAGMQ6nGE7V", + "type": "string" + } + }, + "type": "object" + }, + "UpdateOrganizationRoleDto": { + "properties": { + "description": { + "description": "An optional description of the role's purpose.", + "example": "Can manage all financial operations", + "maxLength": 150, + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "A descriptive name for the role.", + "example": "Finance Administrator", + "maxLength": 48, + "type": "string" + } + }, + "type": "object" + }, + "UpdateRoleDto": { + "properties": { + "description": { + "description": "An optional description of the role.", + "example": "Full administrative access to all resources", + "maxLength": 150, + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "A descriptive name for the role.", + "example": "Super Administrator", + "maxLength": 48, + "type": "string" + } + }, + "type": "object" + }, + "UpdateUserlandUserDto": { + "allOf": [ + { + "properties": { + "email": { + "description": "The email address of the user.", + "example": "marcelina.davis@example.com", + "format": "email", + "type": "string" + }, + "email_verified": { + "description": "Whether the user's email has been verified.", + "example": true, + "type": "boolean" + }, + "external_id": { + "description": "The external ID of the user.", + "example": "f1ffa2b2-c20b-4d39-be5c-212726e11222", + "maxLength": 128, + "pattern": "^[\\x00-\\x7F]+$", + "type": [ + "string", + "null" + ] + }, + "first_name": { + "description": "The first name of the user.", + "example": "Marcelina", + "type": "string" + }, + "last_name": { + "description": "The last name of the user.", + "example": "Davis", + "type": "string" + }, + "locale": { + "description": "The user's preferred locale.", + "example": "en-US", + "type": [ + "string", + "null" + ] + }, + "metadata": { + "additionalProperties": { + "maxLength": 600, + "type": "string" + }, + "description": "Object containing metadata key/value pairs associated with the user.", + "example": { + "timezone": "America/New_York" + }, + "maxProperties": 50, + "propertyNames": { + "maxLength": 40 + }, + "type": [ + "object", + "null" + ] + }, + "name": { + "description": "The user's full name.", + "example": "Marcelina Davis", + "type": "string" + } + }, + "type": "object" + }, + { + "oneOf": [ + { + "not": { + "anyOf": [ + { + "properties": { + "password": { + "x-exclude-from-lint": true + } + }, + "required": [ + "password" + ] + }, + { + "properties": { + "password_hash": { + "x-exclude-from-lint": true + } + }, + "required": [ + "password_hash" + ] + }, + { + "properties": { + "password_hash_type": { + "x-exclude-from-lint": true + } + }, + "required": [ + "password_hash_type" + ] + } + ] + }, + "type": "object" + }, + { + "not": { + "anyOf": [ + { + "properties": { + "password_hash": { + "x-exclude-from-lint": true + } + }, + "required": [ + "password_hash" + ] + }, + { + "properties": { + "password_hash_type": { + "x-exclude-from-lint": true + } + }, + "required": [ + "password_hash_type" + ] + } + ] + }, + "properties": { + "password": { + "description": "The password to set for the user. Mutually exclusive with `password_hash` and `password_hash_type`.", + "example": "strong_password_123!", + "type": "string" + } + }, + "required": [ + "password" + ], + "type": "object" + }, + { + "not": { + "anyOf": [ + { + "properties": { + "password": { + "x-exclude-from-lint": true + } + }, + "required": [ + "password" + ] + } + ] + }, + "properties": { + "password_hash": { + "description": "The hashed password to set for the user. Required with `password_hash_type`. Mutually exclusive with `password`.", + "example": "$2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy", + "type": "string" + }, + "password_hash_type": { + "description": "The algorithm originally used to hash the password, used when providing a `password_hash`. Required with `password_hash`. Mutually exclusive with `password`.", + "enum": [ + "bcrypt", + "firebase-scrypt", + "ssha", + "scrypt", + "pbkdf2", + "argon2" + ], + "example": "bcrypt", + "type": "string" + } + }, + "required": [ + "password_hash", + "password_hash_type" + ], + "type": "object" + } + ] + } + ], + "x-mutually-exclusive-body-groups": { + "password": { + "optional": true, + "variants": { + "hashed": [ + "password_hash", + "password_hash_type" + ], + "plaintext": [ + "password" + ] + } + } + } + }, + "UpdateUserlandUserOrganizationMembershipDto": { + "oneOf": [ + { + "not": { + "anyOf": [ + { + "properties": { + "role_slug": { + "x-exclude-from-lint": true + } + }, + "required": [ + "role_slug" + ] + }, + { + "properties": { + "role_slugs": { + "x-exclude-from-lint": true + } + }, + "required": [ + "role_slugs" + ] + } + ] + }, + "type": "object" + }, + { + "not": { + "anyOf": [ + { + "properties": { + "role_slugs": { + "x-exclude-from-lint": true + } + }, + "required": [ + "role_slugs" + ] + } + ] + }, + "properties": { + "role_slug": { + "description": "A single role identifier. Defaults to `member` or the explicit default role. Mutually exclusive with `role_slugs`.", + "example": "admin", + "type": "string" + } + }, + "required": [ + "role_slug" + ], + "type": "object" + }, + { + "not": { + "anyOf": [ + { + "properties": { + "role_slug": { + "x-exclude-from-lint": true + } + }, + "required": [ + "role_slug" + ] + } + ] + }, + "properties": { + "role_slugs": { + "description": "An array of role identifiers. Limited to one role when Multiple Roles is disabled. Mutually exclusive with `role_slug`.", + "example": [ + "admin" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "role_slugs" + ], + "type": "object" + } + ], + "x-mutually-exclusive-body-groups": { + "role": { + "optional": true, + "variants": { + "multiple": [ + "role_slugs" + ], + "single": [ + "role_slug" + ] + } + } + } + }, + "UpdateWebhookEndpointDto": { + "properties": { + "endpoint_url": { + "description": "The HTTPS URL where webhooks will be sent.", + "example": "https://example.com/webhooks", + "type": "string" + }, + "events": { + "description": "The events that the Webhook Endpoint is subscribed to.", + "example": [ + "user.created", + "dsync.user.created" + ], + "items": { + "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", + "api_key.updated", + "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", + "pipes.connected_account.connected", + "pipes.connected_account.connection_failed", + "pipes.connected_account.disconnected", + "pipes.connected_account.reauthorization_needed", + "session.created", + "session.reauthenticated", + "session.revoked", + "waitlist_user.approved", + "waitlist_user.created", + "waitlist_user.denied" + ], + "type": "string" + }, + "type": "array" + }, + "status": { + "description": "Whether the Webhook Endpoint is enabled or disabled.", + "enum": [ + "enabled", + "disabled" + ], + "example": "enabled", + "type": "string" + } + }, + "type": "object" + }, + "UserApiKey": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "expires_at": { + "description": "Timestamp when the API Key expires. Null means the key does not expire.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier of the API Key.", + "example": "api_key_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "last_used_at": { + "description": "Timestamp of when the API Key was last used.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "A descriptive name for the API Key.", + "example": "Production API Key", + "type": "string" + }, + "obfuscated_value": { + "description": "An obfuscated representation of the API Key value.", + "example": "sk_...3456", + "type": "string" + }, + "object": { + "const": "api_key", + "description": "Distinguishes the API Key object.", + "type": "string" + }, + "owner": { + "description": "The entity that owns the API Key.", + "properties": { + "id": { + "description": "Unique identifier of the API Key owner.", + "example": "user_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "organization_id": { + "description": "Unique identifier of the organization the API Key can access.", + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "type": { + "const": "user", + "description": "The type of the API Key owner.", + "example": "user", + "type": "string" + } + }, + "required": [ + "type", + "id", + "organization_id" + ], + "type": "object" + }, + "permissions": { + "description": "The permission slugs assigned to the API Key.", + "example": [ + "posts:read", + "posts:write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "owner", + "name", + "obfuscated_value", + "last_used_at", + "expires_at", + "permissions", + "created_at", + "updated_at" + ], + "type": "object" + }, + "UserApiKeyList": { + "properties": { + "data": { + "description": "The list of records for the current page.", + "items": { + "$ref": "#/components/schemas/UserApiKey" + }, + "type": "array" + }, + "list_metadata": { + "description": "Pagination cursors for navigating between pages of results.", + "properties": { + "after": { + "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": "api_key_01HXYZ987654321KJIHGFEDCBA", + "type": [ + "string", + "null" + ] + }, + "before": { + "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": "api_key_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "before", + "after" + ], + "type": "object" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "required": [ + "object", + "data", + "list_metadata" + ], + "type": "object" + }, + "UserApiKeyWithValue": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "expires_at": { + "description": "Timestamp when the API Key expires. Null means the key does not expire.", + "example": "2030-01-01T00:00:00.000Z", + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier of the API Key.", + "example": "api_key_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "last_used_at": { + "description": "Timestamp of when the API Key was last used.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "A descriptive name for the API Key.", + "example": "Production API Key", + "type": "string" + }, + "obfuscated_value": { + "description": "An obfuscated representation of the API Key value.", + "example": "sk_...3456", + "type": "string" + }, + "object": { + "const": "api_key", + "description": "Distinguishes the API Key object.", + "type": "string" + }, + "owner": { + "description": "The entity that owns the API Key.", + "properties": { + "id": { + "description": "Unique identifier of the API Key owner.", + "example": "user_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "organization_id": { + "description": "Unique identifier of the organization the API Key can access.", + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "type": { + "const": "user", + "description": "The type of the API Key owner.", + "example": "user", + "type": "string" + } + }, + "required": [ + "type", + "id", + "organization_id" + ], + "type": "object" + }, + "permissions": { + "description": "The permission slugs assigned to the API Key.", + "example": [ + "posts:read", + "posts:write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "value": { + "description": "The full API Key value. Only returned once at creation time.", + "example": "sk_abcdefghijklmnop123456", + "type": "string" + } + }, + "required": [ + "object", + "id", + "owner", + "name", + "obfuscated_value", + "last_used_at", + "expires_at", + "permissions", + "created_at", + "updated_at", + "value" + ], + "type": "object" + }, + "UserConsentOption": { + "properties": { + "choices": { + "description": "The available choices for this consent option.", + "example": [ + { + "label": "I accept the Terms of Service", + "value": "accepted" + } + ], + "items": { + "properties": { + "label": { + "description": "A human-readable label for this choice.", + "example": "I accept the Terms of Service", + "type": "string" + }, + "value": { + "description": "The value of this choice.", + "example": "accepted", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "claim": { + "description": "The claim name for this consent option.", + "example": "tos_accepted", + "type": "string" + }, + "label": { + "description": "A human-readable label for this consent option.", + "example": "Terms of Service", + "type": "string" + }, + "type": { + "const": "enum", + "description": "The type of consent option.", + "type": "string" + } + }, + "required": [ + "claim", + "type", + "label", + "choices" + ], + "type": "object" + }, + "UserManagementLoginRequest": { + "properties": { + "external_auth_id": { + "description": "Identifier provided when AuthKit redirected to your login page.", + "example": "ext_auth_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "user": { + "$ref": "#/components/schemas/UserObject", + "description": "The user to create or update in AuthKit." + }, + "user_consent_options": { + "description": "Array of [User Consent Options](/reference/workos-connect/standalone/user-consent-options) to store with the session.", + "items": { + "$ref": "#/components/schemas/UserConsentOption" + }, + "type": "array" + } + }, + "required": [ + "external_auth_id", + "user" + ], + "type": "object" + }, + "UserObject": { + "properties": { + "email": { + "description": "The user's email address.", + "example": "marcelina.davis@example.com", + "type": "string" + }, + "first_name": { + "description": "The user's first name.", + "example": "Marcelina", + "type": "string" + }, + "id": { + "description": "Your application's user identifier, which will be stored as an [`external_id`](/authkit/metadata/external-identifiers). Used for upserting and deduplication.", + "example": "user_12345", + "type": "string" + }, + "last_name": { + "description": "The user's last name.", + "example": "Davis", + "type": "string" + }, + "metadata": { + "additionalProperties": { + "maxLength": 600, + "type": "string" + }, + "description": "A set of key-value pairs to attach to the user.", + "example": { + "department": "Engineering", + "role": "Developer" + }, + "maxProperties": 50, + "propertyNames": { + "maxLength": 40 + }, + "type": "object" + }, + "name": { + "description": "The user's full name.", + "example": "Marcelina Davis", + "type": "string" + } + }, + "required": [ + "id", + "email" + ], + "type": "object" + }, + "UserRoleAssignment": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "Unique identifier of the role assignment.", + "example": "role_assignment_01HXYZ123456789ABCDEFGH", + "type": "string" + }, + "object": { + "const": "role_assignment", + "description": "Distinguishes the role assignment object.", + "type": "string" + }, + "organization_membership_id": { + "description": "The ID of the organization membership the role is assigned to.", + "example": "om_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "resource": { + "description": "The resource the role is assigned on.", + "properties": { + "external_id": { + "description": "An identifier you provide to reference the resource in your system.", + "example": "proj-456", + "type": "string" + }, + "id": { + "description": "The unique ID of the Resource.", + "example": "authz_resource_01HXYZ123456789ABCDEFGH", + "type": "string" + }, + "resource_type_slug": { + "description": "The slug of the resource type this resource belongs to.", + "example": "project", + "type": "string" + } + }, + "required": [ + "id", + "external_id", + "resource_type_slug" + ], + "type": "object" + }, + "role": { + "$ref": "#/components/schemas/SlimRole", + "description": "The role included in the assignment." + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "organization_membership_id", + "role", + "resource", + "created_at", + "updated_at" + ], + "type": "object" + }, + "UserRoleAssignmentList": { + "properties": { + "data": { + "description": "The list of records for the current page.", + "items": { + "$ref": "#/components/schemas/UserRoleAssignment" + }, + "type": "array" + }, + "list_metadata": { + "description": "Pagination cursors for navigating between pages of results.", + "properties": { + "after": { + "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": "role_assignment_01HXYZ987654321KJIHGFEDCBA", + "type": [ + "string", + "null" + ] + }, + "before": { + "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": "role_assignment_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "before", + "after" + ], + "type": "object" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "required": [ + "object", + "data", + "list_metadata" + ], + "type": "object" + }, + "UserlandAuthenticateResponse": { + "properties": { + "access_token": { + "description": "A JWT containing information about the current session.", + "example": "eyJhb.nNzb19vaWRjX2tleV9.lc5Uk4yWVk5In0", + "type": "string" + }, + "authentication_method": { + "description": "The authentication method used to initiate the session.", + "enum": [ + "SSO", + "Password", + "Passkey", + "AppleOAuth", + "BitbucketOAuth", + "CrossAppAuth", + "DiscordOAuth", + "ExternalAuth", + "GitHubOAuth", + "GitLabOAuth", + "GoogleOAuth", + "IntuitOAuth", + "LinkedInOAuth", + "MicrosoftOAuth", + "SalesforceOAuth", + "SlackOAuth", + "VercelMarketplaceOAuth", + "VercelOAuth", + "XeroOAuth", + "MagicAuth", + "Impersonation", + "MigratedSession" + ], + "example": "SSO", + "type": "string" + }, + "authkit_authorization_code": { + "description": "An authorization code that can be exchanged for tokens by a different application.", + "example": "authkit_authz_code_abc123", + "type": "string" + }, + "impersonator": { + "description": "Information about the impersonator if this session was created via impersonation.", + "properties": { + "email": { + "description": "The email address of the WorkOS Dashboard user who is impersonating the user.", + "example": "admin@foocorp.com", + "type": "string" + }, + "reason": { + "description": "The justification the impersonator gave for impersonating the user.", + "example": "Investigating an issue with the customer's account.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "reason" + ], + "type": "object" + }, + "oauth_tokens": { + "description": "The OAuth tokens from the identity provider, if applicable.", + "properties": { + "access_token": { + "description": "The access token from the OAuth provider.", + "example": "ya29.a0ARrdaM...", + "type": "string" + }, + "expires_at": { + "description": "The timestamp at which the access token expires.", + "example": 1735141800, + "type": "integer" + }, + "provider": { + "description": "The OAuth provider used for authentication.", + "example": "GoogleOAuth", + "type": "string" + }, + "refresh_token": { + "description": "The refresh token from the OAuth provider.", + "example": "1//04g...", + "type": "string" + }, + "scopes": { + "description": "A list of OAuth scopes for which the access token is authorized.", + "example": [ + "profile", + "email", + "openid" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "provider", + "refresh_token", + "access_token", + "expires_at", + "scopes" + ], + "type": "object" + }, + "organization_id": { + "description": "The ID of the organization the user selected to sign in to.", + "example": "org_01H945H0YD4F97JN9MATX7BYAG", + "type": "string" + }, + "refresh_token": { + "description": "[Exchange this token](/reference/authkit/authentication/refresh-token) for a new access token.", + "example": "yAjhKk123NLIjdrBdGZPf8pLIDvK", + "type": "string" + }, + "user": { + "$ref": "#/components/schemas/UserlandUser", + "description": "The corresponding [user](/reference/authkit/user) object." + } + }, + "required": [ + "user", + "access_token", + "refresh_token" + ], + "type": "object" + }, + "UserlandRevokeSessionDto": { + "properties": { + "session_id": { + "description": "The ID of the session to revoke. This can be extracted from the `sid` claim of the access token.", + "example": "session_01H93ZY4F80QPBEZ1R5B2SHQG8", + "type": "string" + } + }, + "required": [ + "session_id" + ], + "type": "object" + }, + "UserlandUser": { + "description": "The user object.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "email": { + "description": "The email address of the user.", + "example": "marcelina.davis@example.com", + "type": "string" + }, + "email_verified": { + "description": "Whether the user's email has been verified.", + "example": true, + "type": "boolean" + }, + "external_id": { + "description": "The external ID of the user.", + "example": "f1ffa2b2-c20b-4d39-be5c-212726e11222", + "type": [ + "string", + "null" + ] + }, + "first_name": { + "description": "The first name of the user.", + "example": "Marcelina", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + }, + "last_name": { + "description": "The last name of the user.", + "example": "Davis", + "type": [ + "string", + "null" + ] + }, + "last_sign_in_at": { + "description": "The timestamp when the user last signed in.", + "example": "2025-06-25T19:07:33.155Z", + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "locale": { + "description": "The user's preferred locale.", + "example": "en-US", + "type": [ + "string", + "null" + ] + }, + "metadata": { + "additionalProperties": { + "maxLength": 600, + "type": "string" + }, + "description": "Object containing metadata key/value pairs associated with the user.", + "example": { + "timezone": "America/New_York" + }, + "maxProperties": 50, + "propertyNames": { + "maxLength": 40 + }, + "type": "object" + }, + "name": { + "description": "The user's full name.", + "example": "Marcelina Davis", + "type": [ + "string", + "null" + ] + }, + "object": { + "const": "user", + "description": "Distinguishes the user object.", + "type": "string" + }, + "profile_picture_url": { + "description": "A URL reference to an image representing the user.", + "example": "https://workoscdn.com/images/v1/123abc", + "type": [ + "string", + "null" + ] + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "first_name", + "last_name", + "profile_picture_url", + "email", + "email_verified", + "external_id", + "last_sign_in_at", + "created_at", + "updated_at" + ], + "type": "object" + }, + "UserlandUserAuthenticationFactorEnrollResponse": { + "properties": { + "authentication_challenge": { + "$ref": "#/components/schemas/AuthenticationChallenge", + "description": "The [authentication challenge](/reference/authkit/mfa/authentication-challenge) object that is used to complete the authentication process." + }, + "authentication_factor": { + "$ref": "#/components/schemas/AuthenticationFactorEnrolled", + "description": "The [authentication factor](/reference/authkit/mfa/authentication-factor) object that represents the additional authentication method used on top of the existing authentication strategy." + } + }, + "required": [ + "authentication_factor", + "authentication_challenge" + ], + "type": "object" + }, + "UserlandUserAuthenticationFactorList": { + "properties": { + "data": { + "description": "The list of records for the current page.", + "items": { + "$ref": "#/components/schemas/AuthenticationFactor" + }, + "type": "array" + }, + "list_metadata": { + "description": "Pagination cursors for navigating between pages of results.", + "properties": { + "after": { + "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": "auth_factor_01HXYZ987654321KJIHGFEDCBA", + "type": [ + "string", + "null" + ] + }, + "before": { + "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": "auth_factor_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "before", + "after" + ], + "type": "object" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "required": [ + "object", + "data", + "list_metadata" + ], + "type": "object" + }, + "UserlandUserInvite": { + "properties": { + "accept_invitation_url": { + "description": "The URL where the recipient can accept the invitation.", + "example": "https://your-app.com/invite?invitation_token=Z1uX3RbwcIl5fIGJJJCXXisdI", + "type": "string" + }, + "accepted_at": { + "description": "The timestamp when the invitation was accepted, or null if not yet accepted.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "accepted_user_id": { + "description": "The ID of the user who accepted the invitation, once accepted.", + "example": null, + "type": [ + "string", + "null" + ] + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "email": { + "description": "The email address of the recipient.", + "example": "marcelina.davis@example.com", + "type": "string" + }, + "expires_at": { + "description": "The timestamp when the invitation expires.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "The unique ID of the invitation.", + "example": "invitation_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + }, + "inviter_user_id": { + "description": "The ID of the user who invited the recipient, if provided.", + "example": "user_01HYGBX8ZGD19949T3BM4FW1C3", + "type": [ + "string", + "null" + ] + }, + "object": { + "const": "invitation", + "description": "Distinguishes the invitation object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the [organization](/reference/organization) that the recipient will join.", + "example": "org_01E4ZCR3C56J083X43JQXF3JK5", + "type": [ + "string", + "null" + ] + }, + "revoked_at": { + "description": "The timestamp when the invitation was revoked, or null if not revoked.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "role_slug": { + "description": "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.", + "example": "admin", + "type": [ + "string", + "null" + ] + }, + "state": { + "description": "The state of the invitation.", + "enum": [ + "pending", + "accepted", + "expired", + "revoked" + ], + "example": "pending", + "type": "string" + }, + "token": { + "description": "The token used to accept the invitation.", + "example": "Z1uX3RbwcIl5fIGJJJCXXisdI", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "email", + "state", + "accepted_at", + "revoked_at", + "expires_at", + "organization_id", + "inviter_user_id", + "accepted_user_id", + "role_slug", + "created_at", + "updated_at", + "token", + "accept_invitation_url" + ], + "type": "object" + }, + "UserlandUserInviteList": { + "properties": { + "data": { + "description": "The list of records for the current page.", + "items": { + "$ref": "#/components/schemas/UserlandUserInvite" + }, + "type": "array" + }, + "list_metadata": { + "description": "Pagination cursors for navigating between pages of results.", + "properties": { + "after": { + "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": "invitation_01HXYZ987654321KJIHGFEDCBA", + "type": [ + "string", + "null" + ] + }, + "before": { + "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": "invitation_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "before", + "after" + ], + "type": "object" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "required": [ + "object", + "data", + "list_metadata" + ], + "type": "object" + }, + "UserlandUserList": { + "properties": { + "data": { + "description": "The list of records for the current page.", + "items": { + "$ref": "#/components/schemas/UserlandUser" + }, + "type": "array" + }, + "list_metadata": { + "description": "Pagination cursors for navigating between pages of results.", + "properties": { + "after": { + "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": "user_01HXYZ987654321KJIHGFEDCBA", + "type": [ + "string", + "null" + ] + }, + "before": { + "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": "user_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "before", + "after" + ], + "type": "object" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "required": [ + "object", + "data", + "list_metadata" + ], + "type": "object" + }, + "UserlandUserOrganizationMembership": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "custom_attributes": { + "additionalProperties": {}, + "description": "An object containing IdP-sourced attributes from the linked [Directory User](/reference/directory-sync/directory-user) or [SSO Profile](/reference/sso/profile). Directory User attributes take precedence when both are linked.", + "example": { + "department": "Engineering", + "location": "Brooklyn", + "title": "Developer Experience Engineer" + }, + "type": "object" + }, + "directory_managed": { + "description": "Whether this organization membership is managed by a directory sync connection.", + "example": false, + "type": "boolean" + }, + "id": { + "description": "The unique ID of the organization membership.", + "example": "om_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "object": { + "const": "organization_membership", + "description": "Distinguishes the organization membership object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization which the user belongs to.", + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "organization_name": { + "description": "The name of the organization which the user belongs to.", + "example": "Acme Corp", + "type": "string" + }, + "role": { + "$ref": "#/components/schemas/SlimRole", + "description": "The primary role assigned to the user within the organization." + }, + "roles": { + "description": "The list of roles assigned to the user within the organization.", + "items": { + "$ref": "#/components/schemas/SlimRole" + }, + "type": "array" + }, + "status": { + "description": "The status of the organization membership. One of `active`, `inactive`, or `pending`.", + "enum": [ + "active", + "inactive", + "pending" + ], + "example": "active", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "user": { + "$ref": "#/components/schemas/UserlandUser", + "description": "The user that belongs to the organization through this membership." + }, + "user_id": { + "description": "The ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + "required": [ + "object", + "id", + "user_id", + "organization_id", + "status", + "directory_managed", + "created_at", + "updated_at", + "role", + "roles", + "user" + ], + "type": "object" + }, + "UserlandUserOrganizationMembershipBaseList": { + "properties": { + "data": { + "description": "The list of records for the current page.", + "items": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "custom_attributes": { + "additionalProperties": {}, + "description": "An object containing IdP-sourced attributes from the linked [Directory User](/reference/directory-sync/directory-user) or [SSO Profile](/reference/sso/profile). Directory User attributes take precedence when both are linked.", + "example": { + "department": "Engineering", + "location": "Brooklyn", + "title": "Developer Experience Engineer" + }, + "type": "object" + }, + "directory_managed": { + "description": "Whether this organization membership is managed by a directory sync connection.", + "example": false, + "type": "boolean" + }, + "id": { + "description": "The unique ID of the organization membership.", + "example": "om_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "object": { + "const": "organization_membership", + "description": "Distinguishes the organization membership object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization which the user belongs to.", + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "organization_name": { + "description": "The name of the organization which the user belongs to.", + "example": "Acme Corp", + "type": "string" + }, + "status": { + "description": "The status of the organization membership. One of `active`, `inactive`, or `pending`.", + "enum": [ + "active", + "inactive", + "pending" + ], + "example": "active", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "user_id": { + "description": "The ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + "required": [ + "object", + "id", + "user_id", + "organization_id", + "status", + "directory_managed", + "created_at", + "updated_at" + ], + "type": "object" + }, + "type": "array" + }, + "list_metadata": { + "description": "Pagination cursors for navigating between pages of results.", + "properties": { + "after": { + "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": "om_01HXYZ987654321KJIHGFEDCBA", + "type": [ + "string", + "null" + ] + }, + "before": { + "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": "om_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "before", + "after" + ], + "type": "object" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "required": [ + "object", + "data", + "list_metadata" + ], + "type": "object" + }, + "UserlandUserOrganizationMembershipBaseWithUser": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "custom_attributes": { + "additionalProperties": {}, + "description": "An object containing IdP-sourced attributes from the linked [Directory User](/reference/directory-sync/directory-user) or [SSO Profile](/reference/sso/profile). Directory User attributes take precedence when both are linked.", + "example": { + "department": "Engineering", + "location": "Brooklyn", + "title": "Developer Experience Engineer" + }, + "type": "object" + }, + "directory_managed": { + "description": "Whether this organization membership is managed by a directory sync connection.", + "example": false, + "type": "boolean" + }, + "id": { + "description": "The unique ID of the organization membership.", + "example": "om_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "object": { + "const": "organization_membership", + "description": "Distinguishes the organization membership object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization which the user belongs to.", + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "organization_name": { + "description": "The name of the organization which the user belongs to.", + "example": "Acme Corp", + "type": "string" + }, + "status": { + "description": "The status of the organization membership. One of `active`, `inactive`, or `pending`.", + "enum": [ + "active", + "inactive", + "pending" + ], + "example": "active", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "user": { + "$ref": "#/components/schemas/UserlandUser", + "description": "The user that belongs to the organization through this membership." + }, + "user_id": { + "description": "The ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + "required": [ + "object", + "id", + "user_id", + "organization_id", + "status", + "directory_managed", + "created_at", + "updated_at", + "user" + ], + "type": "object" + }, + "UserlandUserOrganizationMembershipBaseWithUserList": { + "properties": { + "data": { + "description": "The list of records for the current page.", + "items": { + "$ref": "#/components/schemas/UserlandUserOrganizationMembershipBaseWithUser" + }, + "type": "array" + }, + "list_metadata": { + "description": "Pagination cursors for navigating between pages of results.", + "properties": { + "after": { + "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": "om_01HXYZ987654321KJIHGFEDCBA", + "type": [ + "string", + "null" + ] + }, + "before": { + "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": "om_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "before", + "after" + ], + "type": "object" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "required": [ + "object", + "data", + "list_metadata" + ], + "type": "object" + }, + "UserlandUserOrganizationMembershipList": { + "properties": { + "data": { + "description": "The list of records for the current page.", + "items": { + "$ref": "#/components/schemas/UserlandUserOrganizationMembership" + }, + "type": "array" + }, + "list_metadata": { + "description": "Pagination cursors for navigating between pages of results.", + "properties": { + "after": { + "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": "om_01HXYZ987654321KJIHGFEDCBA", + "type": [ + "string", + "null" + ] + }, + "before": { + "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": "om_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "before", + "after" + ], + "type": "object" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "required": [ + "object", + "data", + "list_metadata" + ], + "type": "object" + }, + "ValidateApiKeyDto": { + "properties": { + "value": { + "description": "The value for an API key.", + "example": "sk_example_1234567890abcdef", + "type": "string" + } + }, + "required": [ + "value" + ], + "type": "object" + }, + "VaultByokKeyProvider": { + "description": "The external key provider used for BYOK.", + "enum": [ + "AWS_KMS", + "GCP_KMS", + "AZURE_KEY_VAULT" + ], + "example": "AWS_KMS", + "type": "string" + }, + "VerifyEmailAddressDto": { + "properties": { + "code": { + "description": "The one-time email verification code.", + "example": "123456", + "type": "string" + } + }, + "required": [ + "code" + ], + "type": "object" + }, + "VerifyEmailResponse": { + "properties": { + "user": { + "$ref": "#/components/schemas/UserlandUser", + "description": "The user whose email was verified." + } + }, + "required": [ + "user" + ], + "type": "object" + }, + "VersionListResponse": { + "properties": { + "data": { + "description": "List of object versions.", + "items": { + "$ref": "#/components/schemas/ObjectVersion" + }, + "type": "array" + }, + "list_metadata": { + "$ref": "#/components/schemas/ListMetadata" + } + }, + "required": [ + "data", + "list_metadata" + ], + "title": "VersionListResponse", + "type": "object" + }, + "WaitlistUser": { + "properties": { + "approved_at": { + "description": "The timestamp when the Waitlist User was approved, or null if not yet approved.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "email": { + "description": "The email address of the Waitlist User.", + "example": "marcelina.davis@example.com", + "type": "string" + }, + "id": { + "description": "The unique ID of the Waitlist User.", + "example": "wl_user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + }, + "object": { + "const": "waitlist_user", + "description": "Distinguishes the Waitlist User object.", + "type": "string" + }, + "state": { + "description": "The state of the Waitlist User.", + "enum": [ + "pending", + "approved", + "denied" + ], + "example": "pending", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "email", + "state", + "approved_at", + "created_at", + "updated_at" + ], + "type": "object" + }, + "WebhookEndpointJson": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "endpoint_url": { + "description": "The URL to which webhooks are sent.", + "example": "https://example.com/webhooks", + "type": "string" + }, + "events": { + "description": "The events that the Webhook Endpoint is subscribed to.", + "example": [ + "user.created", + "dsync.user.created" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "description": "Unique identifier of the Webhook Endpoint.", + "example": "we_0123456789", + "type": "string" + }, + "object": { + "const": "webhook_endpoint", + "description": "Distinguishes the Webhook Endpoint object.", + "type": "string" + }, + "secret": { + "description": "The secret used to sign webhook payloads.", + "example": "whsec_0FWAiVGkEfGBqqsJH4aNAGBJ4", + "type": "string" + }, + "status": { + "description": "Whether the Webhook Endpoint is enabled or disabled.", + "enum": [ + "enabled", + "disabled" + ], + "example": "enabled", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "endpoint_url", + "secret", + "status", + "events", + "created_at", + "updated_at" + ], + "type": "object" + }, + "WebhookEndpointList": { + "properties": { + "data": { + "description": "The list of records for the current page.", + "items": { + "$ref": "#/components/schemas/WebhookEndpointJson" + }, + "type": "array" + }, + "list_metadata": { + "description": "Pagination cursors for navigating between pages of results.", + "properties": { + "after": { + "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", + "type": [ + "string", + "null" + ] + }, + "before": { + "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", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "before", + "after" + ], + "type": "object" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "required": [ + "object", + "data", + "list_metadata" + ], + "type": "object" + }, + "WidgetSessionTokenDto": { + "properties": { + "organization_id": { + "description": "The ID of the organization to scope the widget session to.", + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "scopes": { + "description": "The scopes to grant the widget session.", + "example": [ + "widgets:users-table:manage" + ], + "items": { + "enum": [ + "widgets:users-table:manage", + "widgets:domain-verification:manage", + "widgets:sso:manage", + "widgets:api-keys:manage", + "widgets:dsync:manage", + "widgets:audit-log-streaming:manage", + "widgets:pipes:manage" + ], + "type": "string" + }, + "type": "array" + }, + "user_id": { + "description": "The ID of the user to issue the widget session token for.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + "required": [ + "organization_id" + ], + "type": "object" + }, + "WidgetSessionTokenResponse": { + "properties": { + "token": { + "description": "The widget session token.", + "example": "eyJhbGciOiJSUzI1NiIsImtpZCI6InNlc3Npb24...", + "type": "string" + } + }, + "required": [ + "token" + ], + "type": "object" + } + }, + "securitySchemes": { + "access_token": { + "bearerFormat": "JWT", + "description": "An SSO access token returned from the Get a Profile and Token endpoint.", + "scheme": "bearer", + "type": "http" + }, + "bearer": { + "bearerFormat": "JWT", + "description": "Your WorkOS API key prefixed with `sk_`. Pass it as a Bearer token: `Authorization: Bearer sk_example_123456789`.", + "scheme": "bearer", + "type": "http" + } + } + }, + "info": { + "contact": { + "email": "support@workos.com", + "name": "WorkOS", + "url": "https://workos.com" + }, + "description": "WorkOS REST API", + "license": { + "name": "MIT", + "url": "https://opensource.org/license/MIT" + }, + "title": "WorkOS", + "version": "1.0" + }, + "openapi": "3.1.1", + "paths": { + "/api_keys/validations": { + "post": { + "description": "Validate an API key value and return the API key object if valid.", + "operationId": "ApiKeysController_validateApiKey", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidateApiKeyDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiKeyValidationResponse" + } + } + }, + "description": "OK" + }, + "401": { + "description": "Unauthorized" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Validate API key", + "tags": [ + "api_keys" + ] + } + }, + "/api_keys/{id}": { + "delete": { + "description": "Permanently deletes an API key. This action cannot be undone. Once deleted, any requests using this API key will fail authentication.", + "operationId": "ApiKeysController_delete", + "parameters": [ + { + "description": "The unique ID of the API key.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "api_key_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Delete an API key", + "tags": [ + "api_keys" + ] + } + }, + "/api_keys/{id}/expire": { + "post": { + "description": "Expire an API key immediately, schedule a future expiration, or clear a scheduled future expiration.", + "operationId": "ApiKeysController_expire", + "parameters": [ + { + "description": "The unique ID of the API key.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "api_key_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "examples": { + "clearExpiration": { + "summary": "Clear a scheduled expiration", + "value": { + "expires_at": null + } + }, + "immediateExpiration": { + "summary": "Expire immediately", + "value": {} + }, + "scheduleExpiration": { + "summary": "Schedule an expiration", + "value": { + "expires_at": "2030-01-01T00:00:00.000Z" + } + } + }, + "schema": { + "$ref": "#/components/schemas/ExpireApiKeyDto" + } + } + }, + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "created_at": "2026-01-15T12:00:00.000Z", + "expires_at": "2030-01-01T00:00:00.000Z", + "id": "api_key_01EHZNVPK3SFK441A1RGBFSHRT", + "last_used_at": null, + "name": "Production API Key", + "obfuscated_value": "sk_...3456", + "object": "api_key", + "owner": { + "id": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "organization" + }, + "permissions": [ + "posts:read", + "posts:write" + ], + "updated_at": "2026-01-15T12:00:00.000Z" + }, + "schema": { + "$ref": "#/components/schemas/ApiKey" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "API Key not found: 'api_key_01EHZNVPK3SFK441A1RGBFSHRT'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object", + "x-inline-with-overrides": true + } + } + }, + "description": "Not Found" + }, + "409": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "api_key_already_expired", + "description": "The error code identifying the type of error.", + "example": "api_key_already_expired", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "API key is already expired", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object", + "x-inline-with-overrides": true + } + } + }, + "description": "Conflict" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Expire an API key", + "tags": [ + "api_keys" + ] + } + }, + "/audit_logs/actions": { + "get": { + "description": "Get a list of all Audit Log actions in the current environment.", + "operationId": "AuditLogValidatorsController_list", + "parameters": [ + { + "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.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "obj_1234567890", + "type": "string" + } + }, + { + "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.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "obj_1234567890", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "description": "Order the results by the creation time.", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "properties": { + "list_metadata": { + "description": "Pagination cursors for navigating between pages of results.", + "properties": { + "after": { + "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": "ala_01HXYZ987654321KJIHGFEDCBA", + "type": [ + "string", + "null" + ] + }, + "before": { + "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": "ala_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "before", + "after" + ], + "type": "object" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "type": "object" + }, + { + "properties": { + "data": { + "description": "The list of records for the current page.", + "items": { + "$ref": "#/components/schemas/AuditLogActionJson" + }, + "type": "array" + } + }, + "type": "object" + } + ] + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "List Actions", + "tags": [ + "audit-logs" + ] + } + }, + "/audit_logs/actions/{actionName}/schemas": { + "get": { + "description": "Get a list of all schemas for the Audit Logs action identified by `:name`.", + "operationId": "AuditLogValidatorVersionsController_schemas", + "parameters": [ + { + "description": "The name of the Audit Log action.", + "in": "path", + "name": "actionName", + "required": true, + "schema": { + "example": "user.logged_in", + "type": "string" + } + }, + { + "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.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "obj_1234567890", + "type": "string" + } + }, + { + "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.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "obj_1234567890", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "description": "Order the results by the creation time.", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "properties": { + "list_metadata": { + "description": "Pagination cursors for navigating between pages of results.", + "properties": { + "after": { + "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": "als_01HXYZ987654321KJIHGFEDCBA", + "type": [ + "string", + "null" + ] + }, + "before": { + "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": "als_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "before", + "after" + ], + "type": "object" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "type": "object" + }, + { + "properties": { + "data": { + "description": "The list of records for the current page.", + "items": { + "$ref": "#/components/schemas/AuditLogSchemaJson" + }, + "type": "array" + } + }, + "type": "object" + } + ] + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "List Schemas", + "tags": [ + "audit-logs" + ] + }, + "post": { + "description": "Creates a new Audit Log schema used to validate the payload of incoming Audit Log Events. If the `action` does not exist, it will also be created.", + "operationId": "AuditLogValidatorVersionsController_create", + "parameters": [ + { + "description": "The name of the Audit Log action.", + "in": "path", + "name": "actionName", + "required": true, + "schema": { + "example": "user.logged_in", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuditLogSchemaDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuditLogSchemaJson" + } + } + }, + "description": "Created" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Create Schema", + "tags": [ + "audit-logs" + ] + } + }, + "/audit_logs/events": { + "post": { + "description": "Create an Audit Log Event.\n\nThis API supports idempotency which guarantees that performing the same operation multiple times will have the same result as if the operation were performed only once. This is handy in situations where you may need to retry a request due to a failure or prevent accidental duplicate requests from creating more than one resource.\n\nTo achieve idempotency, you can add `Idempotency-Key` request header to a Create Event request with a unique string as the value. Each subsequent request matching this unique string will return the same response. We suggest using [v4 UUIDs](https://en.wikipedia.org/wiki/Universally_unique_identifier) for idempotency keys to avoid collisions.\n\nIdempotency keys expire after 24 hours. The API will generate a new response if you submit a request with an expired key.", + "operationId": "AuditLogEventsController_create", + "parameters": [ + { + "description": "A unique string to prevent duplicate requests. Each subsequent request matching this unique string will return the same response. We suggest using v4 UUIDs. Keys expire after 24 hours.", + "in": "header", + "name": "idempotency-key", + "required": false, + "schema": { + "example": "884793cd-bef4-46cf-8790-e3d4957a09ce", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuditLogEventIngestionDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "success": true + }, + "schema": { + "$ref": "#/components/schemas/AuditLogEventCreateResponse" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "example": { + "code": "invalid_audit_log_event", + "errors": [ + { + "instancePath": "/targets" + } + ], + "message": "Invalid Audit Log event." + }, + "schema": { + "anyOf": [ + { + "properties": { + "code": { + "description": "The error code identifying the type of error.", + "example": "invalid_audit_log_event", + "type": "string" + }, + "errors": { + "description": "The list of validation errors.", + "items": { + "properties": { + "instancePath": { + "description": "The JSON path to the invalid field in the event payload.", + "example": "/targets", + "type": "string" + } + }, + "required": [ + "instancePath" + ], + "type": "object" + }, + "type": "array" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Invalid Audit Log event.", + "type": "string" + } + }, + "required": [ + "errors", + "message", + "code" + ], + "type": "object" + }, + { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + ] + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "example": { + "message": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'." + }, + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "example": { + "errors": [ + { + "code": "required", + "field": "event.action" + } + ], + "message": "Validation failed." + }, + "schema": { + "properties": { + "errors": { + "description": "The list of validation errors.", + "items": { + "properties": { + "code": { + "description": "The validation error code.", + "example": "required", + "type": "string" + }, + "field": { + "description": "The field that failed validation.", + "example": "event.action", + "type": "string" + } + }, + "required": [ + "code", + "field" + ], + "type": "object" + }, + "type": "array" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "errors", + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + }, + "429": { + "content": { + "application/json": { + "example": { + "code": "rate_limit_exceeded", + "message": "Too many requests." + }, + "schema": { + "properties": { + "code": { + "description": "The error code identifying the type of error.", + "example": "rate_limit_exceeded", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Too many requests.", + "type": "string" + } + }, + "required": [ + "message", + "code" + ], + "type": "object" + } + } + }, + "description": "" + } + }, + "summary": "Create Event", + "tags": [ + "audit-logs" + ] + } + }, + "/audit_logs/exports": { + "post": { + "description": "Create an Audit Log Export. Exports are scoped to a single organization within a specified date range.", + "operationId": "AuditLogExportsController_exports", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuditLogExportCreationDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "example": { + "created_at": "2022-09-02T17:14:57.094Z", + "id": "audit_log_export_01GBZK5MP7TD1YCFQHFR22180V", + "object": "audit_log_export", + "state": "pending", + "updated_at": "2022-09-02T17:14:57.094Z" + }, + "schema": { + "$ref": "#/components/schemas/AuditLogExportJson" + } + } + }, + "description": "The created Audit Log Export object." + }, + "400": { + "content": { + "application/json": { + "example": { + "code": "invalid_audit_log_export_range_date", + "message": "Invalid date range" + }, + "schema": { + "anyOf": [ + { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + }, + { + "properties": { + "error": { + "description": "The error type.", + "example": "Bad Request", + "type": "string" + }, + "message": { + "description": "A list of human-readable error messages describing the validation failures.", + "example": [ + "Invalid date range" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "message", + "error" + ], + "type": "object" + } + ] + } + } + }, + "description": "Invalid request parameters or date range." + } + }, + "summary": "Create Export", + "tags": [ + "audit-logs" + ] + } + }, + "/audit_logs/exports/{auditLogExportId}": { + "get": { + "description": "Get an Audit Log Export. The URL will expire after 10 minutes. If the export is needed again at a later time, refetching the export will regenerate the URL.", + "operationId": "AuditLogExportsController_export", + "parameters": [ + { + "description": "The unique ID of the Audit Log Export.", + "in": "path", + "name": "auditLogExportId", + "required": true, + "schema": { + "example": "audit_log_export_01GBZK5MP7TD1YCFQHFR22180V", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "created_at": "2022-09-02T17:14:57.094Z", + "id": "audit_log_export_01GBZK5MP7TD1YCFQHFR22180V", + "object": "audit_log_export", + "state": "ready", + "updated_at": "2022-09-02T17:14:57.094Z", + "url": "https://exports.audit-logs.com/audit-log-exports/export.csv" + }, + "schema": { + "$ref": "#/components/schemas/AuditLogExportJson" + } + } + }, + "description": "The Audit Log Export object." + }, + "404": { + "content": { + "application/json": { + "example": { + "message": "Audit Log Export not found: 'audit_log_export_01GBZK5MP7TD1YCFQHFR22180V'." + }, + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Audit Log Export not found." + } + }, + "summary": "Get Export", + "tags": [ + "audit-logs" + ] + } + }, + "/auth/challenges/{id}/verify": { + "post": { + "description": "Verifies an Authentication Challenge.", + "operationId": "AuthenticationChallengesController_verify", + "parameters": [ + { + "description": "The unique ID of the Authentication Challenge.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "auth_challenge_01FVYZ5QM8N98T9ME5BCB2BBMJ", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "description": "The one-time code to verify.", + "example": "123456", + "type": "string" + } + }, + "required": [ + "code" + ], + "type": "object" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationChallengeVerifyResponse" + } + } + }, + "description": "Created" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "one_time_code_too_many_attempts", + "description": "The error code identifying the type of error.", + "example": "one_time_code_too_many_attempts", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Verify Challenge", + "tags": [ + "multi-factor-auth.challenges" + ] + } + }, + "/auth/factors/enroll": { + "post": { + "description": "Enrolls an Authentication Factor to be used as an additional factor of authentication. The returned ID should be used to create an authentication Challenge.", + "operationId": "AuthenticationFactorsController_create", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "phone_number": { + "description": "Required when type is 'sms'.", + "example": "+15555555555", + "type": "string" + }, + "totp_issuer": { + "description": "Required when type is 'totp'.", + "example": "Foo Corp", + "type": "string" + }, + "totp_user": { + "description": "Required when type is 'totp'.", + "example": "alan.turing@example.com", + "type": "string" + }, + "type": { + "description": "The type of factor to enroll.", + "enum": [ + "generic_otp", + "sms", + "totp" + ], + "example": "totp", + "type": "string" + }, + "user_id": { + "description": "The ID of the user to associate the factor with.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationFactorEnrolled" + } + } + }, + "description": "Created" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Enroll Factor", + "tags": [ + "multi-factor-auth" + ] + } + }, + "/auth/factors/{id}": { + "delete": { + "description": "Permanently deletes an Authentication Factor. It cannot be undone.", + "operationId": "AuthenticationFactorsController_delete", + "parameters": [ + { + "description": "The unique ID of the Factor.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + }, + "204": { + "description": "No Content" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Delete Factor", + "tags": [ + "multi-factor-auth" + ] + }, + "get": { + "description": "Gets an Authentication Factor.", + "operationId": "AuthenticationFactorsController_get", + "parameters": [ + { + "description": "The unique ID of the Factor.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "created_at": "2026-01-15T12:00:00.000Z", + "id": "auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ", + "object": "authentication_factor", + "totp": { + "issuer": "WorkOS", + "user": "user@example.com" + }, + "type": "totp", + "updated_at": "2026-01-15T12:00:00.000Z", + "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5" + }, + "schema": { + "$ref": "#/components/schemas/AuthenticationFactor" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get Factor", + "tags": [ + "multi-factor-auth" + ] + } + }, + "/auth/factors/{id}/challenge": { + "post": { + "description": "Creates a Challenge for an Authentication Factor.", + "operationId": "AuthenticationFactorsController_challenge", + "parameters": [ + { + "description": "The unique ID of the Authentication Factor to be challenged.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChallengeAuthenticationFactorDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthenticationChallenge" + } + } + }, + "description": "Created" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Challenge Factor", + "tags": [ + "multi-factor-auth" + ] + } + }, + "/authkit/oauth2/complete": { + "post": { + "description": "Completes an external authentication flow and returns control to AuthKit. This endpoint is used with [Standalone Connect](/authkit/connect/standalone) to bridge your existing authentication system with the Connect OAuth API infrastructure.\n\nAfter successfully authenticating a user in your application, calling this endpoint will:\n\n- Create or update the user in AuthKit, using the given `id` as its `external_id`.\n- Return a `redirect_uri` your application should redirect to in order for AuthKit to complete the flow\n\nUsers are automatically created or updated based on the `id` and `email` provided. If a user with the same `id` exists, their information is updated. Otherwise, a new user is created.\n\nIf you provide a new `id` with an `email` that already belongs to an existing user, the request will fail with an error as email addresses are unique to a user.", + "operationId": "ExternalAuthController_completeLogin", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserManagementLoginRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExternalAuthCompleteResponse" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "code": { + "const": "external_auth_session_already_completed", + "description": "The error code identifying the type of error.", + "example": "external_auth_session_already_completed", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "email_change_not_allowed", + "description": "The error code identifying the type of error.", + "example": "email_change_not_allowed", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "email_not_available", + "description": "The error code identifying the type of error.", + "example": "email_not_available", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "invalid_email", + "description": "The error code identifying the type of error.", + "example": "invalid_email", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "error": { + "description": "The HTTP error type.", + "example": "Bad Request", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Claim \"sub\" is reserved and cannot be used.", + "type": "string" + } + }, + "required": [ + "error", + "message" + ], + "type": "object" + } + ] + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Complete external authentication", + "tags": [ + "workos-connect" + ] + } + }, + "/authorization/groups/{group_id}/role_assignments": { + "delete": { + "description": "Remove role assignments from a group that match the provided criteria. Returns 404 when no matching active assignment is found.", + "operationId": "AuthorizationGroupRoleAssignmentsController_removeGroupRoleAssignments", + "parameters": [ + { + "description": "The ID of the group.", + "in": "path", + "name": "group_id", + "required": true, + "schema": { + "example": "group_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteGroupRoleAssignmentsByCriteriaDto" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Remove group role assignments by criteria", + "tags": [ + "authorization" + ], + "x-feature-flag": "user-groups-role-assignment-enabled" + }, + "get": { + "description": "List all role assignments granted to a group. Each assignment represents a role granted to the group on a resource.", + "operationId": "AuthorizationGroupRoleAssignmentsController_list", + "parameters": [ + { + "description": "The ID of the group.", + "in": "path", + "name": "group_id", + "required": true, + "schema": { + "example": "group_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "xxx_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "xxx_01HXYZ987654321KJIHGFEDCBA", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "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).", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GroupRoleAssignmentList" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "List role assignments for a group", + "tags": [ + "authorization" + ], + "x-feature-flag": "user-groups-role-assignment-enabled" + }, + "post": { + "description": "Assign a role to a group on a specific resource.", + "operationId": "AuthorizationGroupRoleAssignmentsController_create", + "parameters": [ + { + "description": "The ID of the group.", + "in": "path", + "name": "group_id", + "required": true, + "schema": { + "example": "group_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateGroupRoleAssignmentDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GroupRoleAssignment" + } + } + }, + "description": "Created" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "409": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "duplicate_group_role_assignment", + "description": "The error code identifying the type of error.", + "example": "duplicate_group_role_assignment", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Assign a role to a group", + "tags": [ + "authorization" + ], + "x-feature-flag": "user-groups-role-assignment-enabled" + }, + "put": { + "description": "Replace all role assignments for a group with the provided list. Existing assignments not in the list will be removed.", + "operationId": "AuthorizationGroupRoleAssignmentsController_replaceGroupRoleAssignments", + "parameters": [ + { + "description": "The ID of the group.", + "in": "path", + "name": "group_id", + "required": true, + "schema": { + "example": "group_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReplaceGroupRoleAssignmentsDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GroupRoleAssignmentList" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Replace all role assignments for a group", + "tags": [ + "authorization" + ], + "x-feature-flag": "user-groups-role-assignment-enabled" + } + }, + "/authorization/groups/{group_id}/role_assignments/{role_assignment_id}": { + "delete": { + "description": "Remove a specific role assignment from a group by its ID.", + "operationId": "AuthorizationGroupRoleAssignmentsController_removeGroupRoleAssignment", + "parameters": [ + { + "description": "The ID of the group.", + "in": "path", + "name": "group_id", + "required": true, + "schema": { + "example": "group_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "description": "The ID of the group role assignment to remove.", + "in": "path", + "name": "role_assignment_id", + "required": true, + "schema": { + "example": "gra_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Remove a group role assignment", + "tags": [ + "authorization" + ], + "x-feature-flag": "user-groups-role-assignment-enabled" + }, + "get": { + "description": "Get a specific role assignment for a group by its ID.", + "operationId": "AuthorizationGroupRoleAssignmentsController_get", + "parameters": [ + { + "description": "The ID of the group.", + "in": "path", + "name": "group_id", + "required": true, + "schema": { + "example": "group_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "description": "The ID of the group role assignment.", + "in": "path", + "name": "role_assignment_id", + "required": true, + "schema": { + "example": "gra_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GroupRoleAssignment" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get a group role assignment", + "tags": [ + "authorization" + ], + "x-feature-flag": "user-groups-role-assignment-enabled" + } + }, + "/authorization/organization_memberships/{organization_membership_id}/check": { + "post": { + "description": "Check if an organization membership has a specific permission on a resource. Supports identification by resource_id OR by resource_external_id + resource_type_slug.", + "operationId": "AuthorizationController_check", + "parameters": [ + { + "description": "The ID of the organization membership to check.", + "in": "path", + "name": "organization_membership_id", + "required": true, + "schema": { + "example": "om_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CheckAuthorizationDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthorizationCheck" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Check authorization", + "tags": [ + "authorization" + ], + "x-mutually-exclusive-body-groups": { + "resource_target": { + "optional": false, + "variants": { + "by_external_id": [ + "resource_external_id", + "resource_type_slug" + ], + "by_id": [ + "resource_id" + ] + } + } + } + } + }, + "/authorization/organization_memberships/{organization_membership_id}/resources": { + "get": { + "description": "Returns all child resources of a parent resource where the organization membership has a specific permission. This is useful for resource discovery\u2014answering \"What projects can this user access in this workspace?\"\n\nYou must provide either `parent_resource_id` or both `parent_resource_external_id` and `parent_resource_type_slug` to identify the parent resource.", + "operationId": "AuthorizationController_listResourcesForMembership", + "parameters": [ + { + "description": "The ID of the organization membership.", + "in": "path", + "name": "organization_membership_id", + "required": true, + "schema": { + "example": "om_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "xxx_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "xxx_01HXYZ987654321KJIHGFEDCBA", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "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).", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + }, + { + "description": "The permission slug to filter by. Only child resources where the organization membership has this permission are returned.", + "in": "query", + "name": "permission_slug", + "required": true, + "schema": { + "example": "project:read", + "type": "string" + } + }, + { + "description": "The WorkOS ID of the parent resource. Provide this or both `parent_resource_external_id` and `parent_resource_type_slug`, but not both. Mutually exclusive with `parent_resource_type_slug` and `parent_resource_external_id`.", + "in": "query", + "name": "parent_resource_id", + "required": false, + "schema": { + "example": "authz_resource_01XYZ789", + "type": "string" + } + }, + { + "description": "The slug of the parent resource type. Must be provided together with `parent_resource_external_id`. Required with `parent_resource_external_id`. Mutually exclusive with `parent_resource_id`.", + "in": "query", + "name": "parent_resource_type_slug", + "required": false, + "schema": { + "example": "project", + "type": "string" + } + }, + { + "description": "The application-specific external identifier of the parent resource. Must be provided together with `parent_resource_type_slug`. Required with `parent_resource_type_slug`. Mutually exclusive with `parent_resource_id`.", + "in": "query", + "name": "parent_resource_external_id", + "required": false, + "schema": { + "example": "external_project_123", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthorizationResourceList" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "bad_request", + "description": "The error code identifying the type of error.", + "example": "bad_request", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "List resources for organization membership", + "tags": [ + "authorization" + ], + "x-mutually-exclusive-parameter-groups": { + "parent_resource": { + "optional": false, + "variants": { + "by_external_id": [ + "parent_resource_type_slug", + "parent_resource_external_id" + ], + "by_id": [ + "parent_resource_id" + ] + } + } + } + } + }, + "/authorization/organization_memberships/{organization_membership_id}/resources/{resource_id}/permissions": { + "get": { + "description": "Returns all permissions the organization membership effectively has on a resource, including permissions inherited through roles assigned to ancestor resources.", + "operationId": "AuthorizationController_listEffectivePermissions", + "parameters": [ + { + "description": "The ID of the organization membership.", + "in": "path", + "name": "organization_membership_id", + "required": true, + "schema": { + "example": "om_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "description": "The ID of the authorization resource.", + "in": "path", + "name": "resource_id", + "required": true, + "schema": { + "example": "authz_resource_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "xxx_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "xxx_01HXYZ987654321KJIHGFEDCBA", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "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).", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthorizationPermissionList" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "List effective permissions for an organization membership on a resource", + "tags": [ + "authorization" + ] + } + }, + "/authorization/organization_memberships/{organization_membership_id}/resources/{resource_type_slug}/{external_id}/permissions": { + "get": { + "description": "Returns all permissions the organization membership effectively has on a resource identified by its external ID, including permissions inherited through roles assigned to ancestor resources.", + "operationId": "AuthorizationController_listEffectivePermissionsByExternalId", + "parameters": [ + { + "description": "The ID of the organization membership.", + "in": "path", + "name": "organization_membership_id", + "required": true, + "schema": { + "example": "om_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "description": "The slug of the resource type.", + "in": "path", + "name": "resource_type_slug", + "required": true, + "schema": { + "example": "document", + "type": "string" + } + }, + { + "description": "An identifier you provide to reference the resource in your system.", + "in": "path", + "name": "external_id", + "required": true, + "schema": { + "example": "doc-456", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "xxx_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "xxx_01HXYZ987654321KJIHGFEDCBA", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "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).", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthorizationPermissionList" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "List effective permissions for an organization membership on a resource by external ID", + "tags": [ + "authorization" + ] + } + }, + "/authorization/organization_memberships/{organization_membership_id}/role_assignments": { + "delete": { + "description": "Remove a role assignment by role slug and resource.", + "operationId": "AuthorizationRoleAssignmentsController_removeRoleByCriteria", + "parameters": [ + { + "description": "The ID of the organization membership.", + "in": "path", + "name": "organization_membership_id", + "required": true, + "schema": { + "example": "om_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RemoveRoleDto" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "Role assignment removed successfully." + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Remove a role assignment", + "tags": [ + "authorization" + ], + "x-mutually-exclusive-body-groups": { + "resource_target": { + "optional": false, + "variants": { + "by_external_id": [ + "resource_external_id", + "resource_type_slug" + ], + "by_id": [ + "resource_id" + ] + } + } + } + }, + "get": { + "description": "List all role assignments for an organization membership. This returns all roles that have been assigned to the user on resources, including organization-level and sub-resource roles.", + "operationId": "AuthorizationRoleAssignmentsController_listRoleAssignments", + "parameters": [ + { + "description": "The ID of the organization membership.", + "in": "path", + "name": "organization_membership_id", + "required": true, + "schema": { + "example": "om_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "xxx_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "xxx_01HXYZ987654321KJIHGFEDCBA", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "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).", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + }, + { + "description": "Filter assignments by the ID of the resource.", + "in": "query", + "name": "resource_id", + "required": false, + "schema": { + "example": "authz_resource_01HXYZ123456789ABCDEFGH", + "type": "string" + } + }, + { + "description": "Filter assignments by the external ID of the resource.", + "in": "query", + "name": "resource_external_id", + "required": false, + "schema": { + "example": "project-ext-456", + "type": "string" + } + }, + { + "description": "Filter assignments by the slug of the resource type.", + "in": "query", + "name": "resource_type_slug", + "required": false, + "schema": { + "example": "project", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserRoleAssignmentList" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "List role assignments", + "tags": [ + "authorization" + ] + }, + "post": { + "description": "Assign a role to an organization membership on a specific resource.", + "operationId": "AuthorizationRoleAssignmentsController_assignRole", + "parameters": [ + { + "description": "The ID of the organization membership.", + "in": "path", + "name": "organization_membership_id", + "required": true, + "schema": { + "example": "om_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AssignRoleDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "example": { + "created_at": "2026-01-15T12:00:00.000Z", + "id": "role_assignment_01HXYZ123456789ABCDEFGH", + "object": "role_assignment", + "organization_membership_id": "om_01HXYZ123456789ABCDEFGHIJ", + "resource": { + "external_id": "project-ext-456", + "id": "authz_resource_01HXYZ123456789ABCDEFGH", + "resource_type_slug": "project" + }, + "role": { + "slug": "editor" + }, + "updated_at": "2026-01-15T12:00:00.000Z" + }, + "schema": { + "$ref": "#/components/schemas/UserRoleAssignment" + } + } + }, + "description": "Created" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Assign a role", + "tags": [ + "authorization" + ], + "x-mutually-exclusive-body-groups": { + "resource_target": { + "optional": false, + "variants": { + "by_external_id": [ + "resource_external_id", + "resource_type_slug" + ], + "by_id": [ + "resource_id" + ] + } + } + } + } + }, + "/authorization/organization_memberships/{organization_membership_id}/role_assignments/{role_assignment_id}": { + "delete": { + "description": "Remove a role assignment using its ID.", + "operationId": "AuthorizationRoleAssignmentsController_removeRoleById", + "parameters": [ + { + "description": "The ID of the organization membership.", + "in": "path", + "name": "organization_membership_id", + "required": true, + "schema": { + "example": "om_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "description": "The ID of the role assignment to remove.", + "in": "path", + "name": "role_assignment_id", + "required": true, + "schema": { + "example": "role_assignment_01HXYZ123456789ABCDEFGH", + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Role assignment removed successfully." + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Remove a role assignment by ID", + "tags": [ + "authorization" + ] + } + }, + "/authorization/organizations/{organizationId}/roles": { + "get": { + "description": "Get a list of all roles that apply to an organization. This includes both environment roles and custom roles, returned in priority order.", + "operationId": "AuthorizationOrganizationRolesController_list", + "parameters": [ + { + "description": "The ID of the organization.", + "in": "path", + "name": "organizationId", + "required": true, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoleList" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "List custom roles", + "tags": [ + "authorization" + ] + }, + "post": { + "description": "Create a new custom role for this organization.", + "operationId": "AuthorizationOrganizationRolesController_create", + "parameters": [ + { + "description": "The ID of the organization.", + "in": "path", + "name": "organizationId", + "required": true, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateOrganizationRoleDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "An optional description of the role.", + "example": "Can manage billing and invoices", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier of the role.", + "example": "role_01EHQMYV6MBK39QC5PZXHY59C3", + "type": "string" + }, + "name": { + "description": "A descriptive name for the role.", + "example": "Billing Administrator", + "type": "string" + }, + "object": { + "const": "role", + "description": "Distinguishes the role object.", + "example": "role", + "type": "string" + }, + "permissions": { + "description": "The permission slugs assigned to the role.", + "example": [ + "posts:read", + "posts:write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "resource_type_slug": { + "description": "The slug of the resource type the role is scoped to.", + "example": "organization", + "type": "string" + }, + "slug": { + "description": "A unique slug for the role.", + "example": "org-billing-admin", + "type": "string" + }, + "type": { + "description": "Whether the role is scoped to the environment or an organization (custom role).", + "enum": [ + "EnvironmentRole", + "OrganizationRole" + ], + "example": "OrganizationRole", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "slug", + "object", + "id", + "name", + "description", + "type", + "resource_type_slug", + "permissions", + "created_at", + "updated_at" + ], + "type": "object", + "x-inline-with-overrides": true + } + } + }, + "description": "Created" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "bad_request", + "description": "The error code identifying the type of error.", + "example": "bad_request", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "409": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "organization_role_slug_conflict", + "description": "The error code identifying the type of error.", + "example": "organization_role_slug_conflict", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Create a custom role", + "tags": [ + "authorization" + ] + } + }, + "/authorization/organizations/{organizationId}/roles/{slug}": { + "delete": { + "description": "Delete an existing custom role.", + "operationId": "AuthorizationOrganizationRolesController_delete", + "parameters": [ + { + "description": "The ID of the organization.", + "in": "path", + "name": "organizationId", + "required": true, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + }, + { + "description": "The slug of the role.", + "in": "path", + "name": "slug", + "required": true, + "schema": { + "example": "org-admin", + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "bad_request", + "description": "The error code identifying the type of error.", + "example": "bad_request", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "409": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "code": { + "const": "role_has_assignments", + "description": "The error code identifying the type of error.", + "example": "role_has_assignments", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "role_has_group_role_mappings", + "description": "The error code identifying the type of error.", + "example": "role_has_group_role_mappings", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + ] + } + } + }, + "description": "" + } + }, + "summary": "Delete a custom role", + "tags": [ + "authorization" + ] + }, + "get": { + "description": "Retrieve a role that applies to an organization by its slug. This can return either an environment role or a custom role.", + "operationId": "AuthorizationOrganizationRolesController_get", + "parameters": [ + { + "description": "The ID of the organization.", + "in": "path", + "name": "organizationId", + "required": true, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + }, + { + "description": "The slug of the role.", + "in": "path", + "name": "slug", + "required": true, + "schema": { + "example": "org-billing-admin", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "An optional description of the role.", + "example": "Can view and export billing reports", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier of the role.", + "example": "role_01EHQMYV6MBK39QC5PZXHY59C3", + "type": "string" + }, + "name": { + "description": "A descriptive name for the role.", + "example": "Billing Manager", + "type": "string" + }, + "object": { + "const": "role", + "description": "Distinguishes the role object.", + "example": "role", + "type": "string" + }, + "permissions": { + "description": "The permission slugs assigned to the role.", + "example": [ + "posts:read", + "posts:write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "resource_type_slug": { + "description": "The slug of the resource type the role is scoped to.", + "example": "organization", + "type": "string" + }, + "slug": { + "description": "A unique slug for the role.", + "example": "org-billing-admin", + "type": "string" + }, + "type": { + "description": "Whether the role is scoped to the environment or an organization (custom role).", + "enum": [ + "EnvironmentRole", + "OrganizationRole" + ], + "example": "OrganizationRole", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "slug", + "object", + "id", + "name", + "description", + "type", + "resource_type_slug", + "permissions", + "created_at", + "updated_at" + ], + "type": "object", + "x-inline-with-overrides": true + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get a custom role", + "tags": [ + "authorization" + ] + }, + "patch": { + "description": "Update an existing custom role. Only the fields provided in the request body will be updated.", + "operationId": "AuthorizationOrganizationRolesController_update", + "parameters": [ + { + "description": "The ID of the organization.", + "in": "path", + "name": "organizationId", + "required": true, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + }, + { + "description": "The slug of the role.", + "in": "path", + "name": "slug", + "required": true, + "schema": { + "example": "org-billing-admin", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateOrganizationRoleDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "An optional description of the role.", + "example": "Can manage all financial operations", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier of the role.", + "example": "role_01EHQMYV6MBK39QC5PZXHY59C3", + "type": "string" + }, + "name": { + "description": "A descriptive name for the role.", + "example": "Finance Administrator", + "type": "string" + }, + "object": { + "const": "role", + "description": "Distinguishes the role object.", + "example": "role", + "type": "string" + }, + "permissions": { + "description": "The permission slugs assigned to the role.", + "example": [ + "posts:read", + "posts:write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "resource_type_slug": { + "description": "The slug of the resource type the role is scoped to.", + "example": "organization", + "type": "string" + }, + "slug": { + "description": "A unique slug for the role.", + "example": "org-billing-admin", + "type": "string" + }, + "type": { + "description": "Whether the role is scoped to the environment or an organization (custom role).", + "enum": [ + "EnvironmentRole", + "OrganizationRole" + ], + "example": "OrganizationRole", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "slug", + "object", + "id", + "name", + "description", + "type", + "resource_type_slug", + "permissions", + "created_at", + "updated_at" + ], + "type": "object", + "x-inline-with-overrides": true + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "bad_request", + "description": "The error code identifying the type of error.", + "example": "bad_request", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Update a custom role", + "tags": [ + "authorization" + ] + } + }, + "/authorization/organizations/{organizationId}/roles/{slug}/permissions": { + "post": { + "description": "Add a single permission to a custom role. If the permission is already assigned to the role, this operation has no effect.", + "operationId": "AuthorizationOrganizationRolePermissionsController_addPermission", + "parameters": [ + { + "description": "The ID of the organization.", + "in": "path", + "name": "organizationId", + "required": true, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + }, + { + "description": "The slug of the role.", + "in": "path", + "name": "slug", + "required": true, + "schema": { + "example": "org-admin", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddRolePermissionDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "An optional description of the role.", + "example": "Can manage all resources", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier of the role.", + "example": "role_01EHQMYV6MBK39QC5PZXHY59C3", + "type": "string" + }, + "name": { + "description": "A descriptive name for the role.", + "example": "Organization Admin", + "type": "string" + }, + "object": { + "const": "role", + "description": "Distinguishes the role object.", + "example": "role", + "type": "string" + }, + "permissions": { + "description": "The permission slugs assigned to the role.", + "example": [ + "reports:export" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "resource_type_slug": { + "description": "The slug of the resource type the role is scoped to.", + "example": "organization", + "type": "string" + }, + "slug": { + "description": "A unique slug for the role.", + "example": "org-admin", + "type": "string" + }, + "type": { + "description": "Whether the role is scoped to the environment or an organization (custom role).", + "enum": [ + "EnvironmentRole", + "OrganizationRole" + ], + "example": "OrganizationRole", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "slug", + "object", + "id", + "name", + "description", + "type", + "resource_type_slug", + "permissions", + "created_at", + "updated_at" + ], + "type": "object", + "x-inline-with-overrides": true + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "bad_request", + "description": "The error code identifying the type of error.", + "example": "bad_request", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Add a permission to a custom role", + "tags": [ + "authorization" + ] + }, + "put": { + "description": "Replace all permissions on a custom role with the provided list.", + "operationId": "AuthorizationOrganizationRolePermissionsController_setPermissions", + "parameters": [ + { + "description": "The ID of the organization.", + "in": "path", + "name": "organizationId", + "required": true, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + }, + { + "description": "The slug of the role.", + "in": "path", + "name": "slug", + "required": true, + "schema": { + "example": "org-admin", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SetRolePermissionsDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "An optional description of the role.", + "example": "Can manage all resources", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier of the role.", + "example": "role_01EHQMYV6MBK39QC5PZXHY59C3", + "type": "string" + }, + "name": { + "description": "A descriptive name for the role.", + "example": "Organization Admin", + "type": "string" + }, + "object": { + "const": "role", + "description": "Distinguishes the role object.", + "example": "role", + "type": "string" + }, + "permissions": { + "description": "The permission slugs assigned to the role.", + "example": [ + "billing:read", + "billing:write", + "invoices:manage", + "reports:view" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "resource_type_slug": { + "description": "The slug of the resource type the role is scoped to.", + "example": "organization", + "type": "string" + }, + "slug": { + "description": "A unique slug for the role.", + "example": "org-admin", + "type": "string" + }, + "type": { + "description": "Whether the role is scoped to the environment or an organization (custom role).", + "enum": [ + "EnvironmentRole", + "OrganizationRole" + ], + "example": "OrganizationRole", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "slug", + "object", + "id", + "name", + "description", + "type", + "resource_type_slug", + "permissions", + "created_at", + "updated_at" + ], + "type": "object", + "x-inline-with-overrides": true + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Set permissions for a custom role", + "tags": [ + "authorization" + ] + } + }, + "/authorization/organizations/{organizationId}/roles/{slug}/permissions/{permissionSlug}": { + "delete": { + "description": "Remove a single permission from a custom role by its slug.", + "operationId": "AuthorizationOrganizationRolePermissionsController_removePermission", + "parameters": [ + { + "description": "The ID of the organization.", + "in": "path", + "name": "organizationId", + "required": true, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + }, + { + "description": "The slug of the role.", + "in": "path", + "name": "slug", + "required": true, + "schema": { + "example": "org-admin", + "type": "string" + } + }, + { + "description": "The slug of the permission to remove.", + "in": "path", + "name": "permissionSlug", + "required": true, + "schema": { + "example": "documents:read", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Role" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Remove a permission from a custom role", + "tags": [ + "authorization" + ] + } + }, + "/authorization/organizations/{organization_id}/resources/{resource_type_slug}/{external_id}": { + "delete": { + "description": "Delete an authorization resource by organization, resource type, and external ID. This also deletes all descendant resources.", + "operationId": "AuthorizationResourcesByExternalIdController_deleteByExternalId", + "parameters": [ + { + "description": "The ID of the organization that owns the resource.", + "in": "path", + "name": "organization_id", + "required": true, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + }, + { + "description": "The slug of the resource type.", + "in": "path", + "name": "resource_type_slug", + "required": true, + "schema": { + "example": "project", + "type": "string" + } + }, + { + "description": "An identifier you provide to reference the resource in your system.", + "in": "path", + "name": "external_id", + "required": true, + "schema": { + "example": "proj-456", + "type": "string" + } + }, + { + "description": "If true, deletes all descendant resources and role assignments. If not set and the resource has children or assignments, the request will fail.", + "in": "query", + "name": "cascade_delete", + "required": false, + "schema": { + "default": false, + "example": false, + "type": "boolean" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "lock_timeout", + "description": "The error code identifying the type of error.", + "example": "lock_timeout", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "409": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "code": { + "const": "resource_has_dependents", + "description": "The error code identifying the type of error.", + "example": "resource_has_dependents", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "resource_type_update_in_progress", + "description": "The error code identifying the type of error.", + "example": "resource_type_update_in_progress", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + ] + } + } + }, + "description": "" + } + }, + "summary": "Delete an authorization resource by external ID", + "tags": [ + "authorization" + ] + }, + "get": { + "description": "Retrieve the details of an authorization resource by its external ID, organization, and resource type. This is useful when you only have the external ID from your system and need to fetch the full resource details.", + "operationId": "AuthorizationResourcesByExternalIdController_getByExternalId", + "parameters": [ + { + "description": "The ID of the organization that owns the resource.", + "in": "path", + "name": "organization_id", + "required": true, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + }, + { + "description": "The slug of the resource type.", + "in": "path", + "name": "resource_type_slug", + "required": true, + "schema": { + "example": "project", + "type": "string" + } + }, + { + "description": "An identifier you provide to reference the resource in your system.", + "in": "path", + "name": "external_id", + "required": true, + "schema": { + "example": "proj-456", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthorizationResource" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get a resource by external ID", + "tags": [ + "authorization" + ] + }, + "patch": { + "description": "Update an existing authorization resource using its external ID.", + "operationId": "AuthorizationResourcesByExternalIdController_updateByExternalId", + "parameters": [ + { + "description": "The ID of the organization that owns the resource.", + "in": "path", + "name": "organization_id", + "required": true, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + }, + { + "description": "The slug of the resource type.", + "in": "path", + "name": "resource_type_slug", + "required": true, + "schema": { + "example": "project", + "type": "string" + } + }, + { + "description": "An identifier you provide to reference the resource in your system.", + "in": "path", + "name": "external_id", + "required": true, + "schema": { + "example": "proj-456", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateAuthorizationResourceDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "An optional description of the Resource.", + "example": "Updated description", + "type": [ + "string", + "null" + ] + }, + "external_id": { + "description": "An identifier you provide to reference the resource in your system.", + "example": "proj-456", + "type": "string" + }, + "id": { + "description": "The unique ID of the Resource.", + "example": "authz_resource_01HXYZ123456789ABCDEFGH", + "type": "string" + }, + "name": { + "description": "A human-readable name for the Resource.", + "example": "Updated Name", + "type": "string" + }, + "object": { + "const": "authorization_resource", + "description": "Distinguishes the Resource object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization that owns the resource.", + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "parent_resource_id": { + "description": "The ID of the parent resource, if this resource is nested.", + "example": "authz_resource_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + }, + "resource_type_slug": { + "description": "The slug of the resource type this resource belongs to.", + "example": "project", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "name", + "description", + "organization_id", + "parent_resource_id", + "id", + "external_id", + "resource_type_slug", + "created_at", + "updated_at" + ], + "type": "object", + "x-inline-with-overrides": true + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "lock_timeout", + "description": "The error code identifying the type of error.", + "example": "lock_timeout", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "409": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "resource_type_update_in_progress", + "description": "The error code identifying the type of error.", + "example": "resource_type_update_in_progress", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Update a resource by external ID", + "tags": [ + "authorization" + ], + "x-mutually-exclusive-body-groups": { + "parent_resource": { + "optional": true, + "variants": { + "by_external_id": [ + "parent_resource_external_id", + "parent_resource_type_slug" + ], + "by_id": [ + "parent_resource_id" + ] + } + } + } + } + }, + "/authorization/organizations/{organization_id}/resources/{resource_type_slug}/{external_id}/organization_memberships": { + "get": { + "description": "Returns all organization memberships that have a specific permission on a resource, using the resource's external ID. This is useful for answering \"Who can access this resource?\" when you only have the external ID.", + "operationId": "AuthorizationResourcesByExternalIdController_listOrganizationMembershipsForResourceByExternalId", + "parameters": [ + { + "description": "The ID of the organization that owns the resource.", + "in": "path", + "name": "organization_id", + "required": true, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + }, + { + "description": "The slug of the resource type this resource belongs to.", + "in": "path", + "name": "resource_type_slug", + "required": true, + "schema": { + "example": "project", + "type": "string" + } + }, + { + "description": "An identifier you provide to reference the resource in your system.", + "in": "path", + "name": "external_id", + "required": true, + "schema": { + "example": "proj-456", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "xxx_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "xxx_01HXYZ987654321KJIHGFEDCBA", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "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).", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + }, + { + "description": "The permission slug to filter by. Only users with this permission on the resource are returned.", + "in": "query", + "name": "permission_slug", + "required": true, + "schema": { + "example": "project:read", + "type": "string" + } + }, + { + "description": "Filter by assignment type. Use \"direct\" for direct assignments only, or \"indirect\" to include inherited assignments.", + "in": "query", + "name": "assignment", + "required": false, + "schema": { + "enum": [ + "direct", + "indirect" + ], + "example": "direct", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserlandUserOrganizationMembershipBaseWithUserList" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "bad_request", + "description": "The error code identifying the type of error.", + "example": "bad_request", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "List memberships for a resource by external ID", + "tags": [ + "authorization" + ] + } + }, + "/authorization/organizations/{organization_id}/resources/{resource_type_slug}/{external_id}/role_assignments": { + "get": { + "description": "List all role assignments granted on a resource, identified by its external ID. Each assignment includes the organization membership it was granted to.", + "operationId": "AuthorizationRoleAssignmentsController_listRoleAssignmentsForResourceByExternalId", + "parameters": [ + { + "description": "The ID of the organization that owns the resource.", + "in": "path", + "name": "organization_id", + "required": true, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + }, + { + "description": "The slug of the resource type.", + "in": "path", + "name": "resource_type_slug", + "required": true, + "schema": { + "example": "project", + "type": "string" + } + }, + { + "description": "An identifier you provide to reference the resource in your system.", + "in": "path", + "name": "external_id", + "required": true, + "schema": { + "example": "proj-456", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "xxx_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "xxx_01HXYZ987654321KJIHGFEDCBA", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "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).", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + }, + { + "description": "Filter assignments by the slug of the role.", + "in": "query", + "name": "role_slug", + "required": false, + "schema": { + "example": "editor", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserRoleAssignmentList" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "List role assignments for a resource by external ID", + "tags": [ + "authorization" + ] + } + }, + "/authorization/permissions": { + "get": { + "description": "Get a list of all permissions in your WorkOS environment.", + "operationId": "AuthorizationPermissionsController_list", + "parameters": [ + { + "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\"`.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "xxx_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "xxx_01HXYZ987654321KJIHGFEDCBA", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "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).", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthorizationPermissionList" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "List permissions", + "tags": [ + "permissions" + ] + }, + "post": { + "description": "Create a new permission in your WorkOS environment. The permission can then be assigned to environment roles and custom roles.", + "operationId": "AuthorizationPermissionsController_create", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateAuthorizationPermissionDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "An optional description of the Permission.", + "example": "Allows viewing document contents", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier of the Permission.", + "example": "perm_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "name": { + "description": "A descriptive name for the Permission.", + "example": "View Documents", + "type": "string" + }, + "object": { + "const": "permission", + "description": "Distinguishes the Permission object.", + "type": "string" + }, + "resource_type_slug": { + "description": "The slug of the resource type associated with the permission.", + "example": "document", + "type": "string" + }, + "slug": { + "description": "A unique key to reference the permission. Must be lowercase and contain only letters, numbers, hyphens, underscores, colons, periods, and asterisks.", + "example": "documents:read", + "type": "string" + }, + "system": { + "description": "Whether the permission is a system permission. System permissions are managed by WorkOS and cannot be deleted.", + "example": false, + "type": "boolean" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "slug", + "name", + "description", + "system", + "resource_type_slug", + "created_at", + "updated_at" + ], + "type": "object", + "x-inline-with-overrides": true + } + } + }, + "description": "Created" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "bad_request", + "description": "The error code identifying the type of error.", + "example": "bad_request", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "409": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "permission_slug_conflict", + "description": "The error code identifying the type of error.", + "example": "permission_slug_conflict", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Create a permission", + "tags": [ + "permissions" + ] + } + }, + "/authorization/permissions/{slug}": { + "delete": { + "description": "Delete an existing permission. System permissions cannot be deleted.", + "operationId": "AuthorizationPermissionsController_delete", + "parameters": [ + { + "description": "A unique key to reference the permission. Must be lowercase and contain only letters, numbers, hyphens, underscores, colons, periods, and asterisks.", + "in": "path", + "name": "slug", + "required": true, + "schema": { + "example": "documents:read", + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Delete a permission", + "tags": [ + "permissions" + ] + }, + "get": { + "description": "Retrieve a permission by its unique slug.", + "operationId": "AuthorizationPermissionsController_find", + "parameters": [ + { + "description": "A unique key to reference the permission. Must be lowercase and contain only letters, numbers, hyphens, underscores, colons, periods, and asterisks.", + "in": "path", + "name": "slug", + "required": true, + "schema": { + "example": "documents:read", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthorizationPermission" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get a permission", + "tags": [ + "permissions" + ] + }, + "patch": { + "description": "Update an existing permission. Only the fields provided in the request body will be updated.", + "operationId": "AuthorizationPermissionsController_update", + "parameters": [ + { + "description": "A unique key to reference the permission. Must be lowercase and contain only letters, numbers, hyphens, underscores, colons, periods, and asterisks.", + "in": "path", + "name": "slug", + "required": true, + "schema": { + "example": "documents:read", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateAuthorizationPermissionDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthorizationPermission" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Update a permission", + "tags": [ + "permissions" + ] + } + }, + "/authorization/resources": { + "get": { + "description": "Get a paginated list of authorization resources.", + "operationId": "AuthorizationResourcesController_list", + "parameters": [ + { + "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\"`.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "xxx_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "xxx_01HXYZ987654321KJIHGFEDCBA", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "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).", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + }, + { + "description": "Filter resources by organization ID.", + "in": "query", + "name": "organization_id", + "required": false, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + }, + { + "description": "Filter resources by resource type slug.", + "in": "query", + "name": "resource_type_slug", + "required": false, + "schema": { + "example": "project", + "type": "string" + } + }, + { + "description": "Filter resources by external ID.", + "in": "query", + "name": "resource_external_id", + "required": false, + "schema": { + "example": "my-project-123", + "type": "string" + } + }, + { + "description": "Filter resources by parent resource ID. Mutually exclusive with `parent_resource_type_slug` and `parent_external_id`.", + "in": "query", + "name": "parent_resource_id", + "required": false, + "schema": { + "example": "authz_resource_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "description": "Filter resources by parent resource type slug. Required with `parent_external_id`. Mutually exclusive with `parent_resource_id`.", + "in": "query", + "name": "parent_resource_type_slug", + "required": false, + "schema": { + "example": "workspace", + "type": "string" + } + }, + { + "description": "Filter resources by parent external ID. Required with `parent_resource_type_slug`. Mutually exclusive with `parent_resource_id`.", + "in": "query", + "name": "parent_external_id", + "required": false, + "schema": { + "example": "ext-workspace-123", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthorizationResourceList" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "missing_organization_id_or_resource_type_slug", + "description": "The error code identifying the type of error.", + "example": "missing_organization_id_or_resource_type_slug", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "List resources", + "tags": [ + "authorization" + ], + "x-mutually-exclusive-parameter-groups": { + "parent": { + "optional": true, + "variants": { + "by_external_id": [ + "parent_resource_type_slug", + "parent_external_id" + ], + "by_id": [ + "parent_resource_id" + ] + } + } + } + }, + "post": { + "description": "Create a new authorization resource.", + "operationId": "AuthorizationResourcesController_create", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateAuthorizationResourceDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "An optional description of the Resource.", + "example": "Primary workspace for the Acme team", + "type": [ + "string", + "null" + ] + }, + "external_id": { + "description": "An identifier you provide to reference the resource in your system.", + "example": "my-workspace-01", + "type": "string" + }, + "id": { + "description": "The unique ID of the Resource.", + "example": "authz_resource_01HXYZ123456789ABCDEFGH", + "type": "string" + }, + "name": { + "description": "A human-readable name for the Resource.", + "example": "Acme Workspace", + "type": "string" + }, + "object": { + "const": "authorization_resource", + "description": "Distinguishes the Resource object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization that owns the resource.", + "example": "org_01EHQMYV6MBK39QC5PZXHY59C3", + "type": "string" + }, + "parent_resource_id": { + "description": "The ID of the parent resource, if this resource is nested.", + "example": "authz_resource_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + }, + "resource_type_slug": { + "description": "The slug of the resource type this resource belongs to.", + "example": "workspace", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "name", + "description", + "organization_id", + "parent_resource_id", + "id", + "external_id", + "resource_type_slug", + "created_at", + "updated_at" + ], + "type": "object", + "x-inline-with-overrides": true + } + } + }, + "description": "Created" + }, + "400": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "code": { + "const": "bad_request", + "description": "The error code identifying the type of error.", + "example": "bad_request", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "lock_timeout", + "description": "The error code identifying the type of error.", + "example": "lock_timeout", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + ] + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "409": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "code": { + "const": "authorization_resource_external_id_conflict", + "description": "The error code identifying the type of error.", + "example": "authorization_resource_external_id_conflict", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "resource_type_update_in_progress", + "description": "The error code identifying the type of error.", + "example": "resource_type_update_in_progress", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + ] + } + } + }, + "description": "" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Create an authorization resource", + "tags": [ + "authorization" + ], + "x-mutually-exclusive-body-groups": { + "parent_resource": { + "optional": true, + "variants": { + "by_external_id": [ + "parent_resource_external_id", + "parent_resource_type_slug" + ], + "by_id": [ + "parent_resource_id" + ] + } + } + } + } + }, + "/authorization/resources/{resource_id}": { + "delete": { + "description": "Delete an authorization resource and all its descendants.", + "operationId": "AuthorizationResourcesController_delete", + "parameters": [ + { + "description": "The ID of the authorization resource.", + "in": "path", + "name": "resource_id", + "required": true, + "schema": { + "example": "authz_resource_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "description": "If true, deletes all descendant resources and role assignments. If not set and the resource has children or assignments, the request will fail.", + "in": "query", + "name": "cascade_delete", + "required": false, + "schema": { + "default": false, + "example": false, + "type": "boolean" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "lock_timeout", + "description": "The error code identifying the type of error.", + "example": "lock_timeout", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "409": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "code": { + "const": "resource_has_dependents", + "description": "The error code identifying the type of error.", + "example": "resource_has_dependents", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "resource_type_update_in_progress", + "description": "The error code identifying the type of error.", + "example": "resource_type_update_in_progress", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + ] + } + } + }, + "description": "" + } + }, + "summary": "Delete an authorization resource", + "tags": [ + "authorization" + ] + }, + "get": { + "description": "Retrieve the details of an authorization resource by its ID.", + "operationId": "AuthorizationResourcesController_findById", + "parameters": [ + { + "description": "The ID of the authorization resource.", + "in": "path", + "name": "resource_id", + "required": true, + "schema": { + "example": "authz_resource_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthorizationResource" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Get a resource", + "tags": [ + "authorization" + ] + }, + "patch": { + "description": "Update an existing authorization resource.", + "operationId": "AuthorizationResourcesController_update", + "parameters": [ + { + "description": "The ID of the authorization resource.", + "in": "path", + "name": "resource_id", + "required": true, + "schema": { + "example": "authz_resource_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateAuthorizationResourceDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "An optional description of the Resource.", + "example": "Updated description", + "type": [ + "string", + "null" + ] + }, + "external_id": { + "description": "An identifier you provide to reference the resource in your system.", + "example": "proj-456", + "type": "string" + }, + "id": { + "description": "The unique ID of the Resource.", + "example": "authz_resource_01HXYZ123456789ABCDEFGH", + "type": "string" + }, + "name": { + "description": "A human-readable name for the Resource.", + "example": "Updated Name", + "type": "string" + }, + "object": { + "const": "authorization_resource", + "description": "Distinguishes the Resource object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization that owns the resource.", + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "parent_resource_id": { + "description": "The ID of the parent resource, if this resource is nested.", + "example": "authz_resource_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + }, + "resource_type_slug": { + "description": "The slug of the resource type this resource belongs to.", + "example": "project", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "name", + "description", + "organization_id", + "parent_resource_id", + "id", + "external_id", + "resource_type_slug", + "created_at", + "updated_at" + ], + "type": "object", + "x-inline-with-overrides": true + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "lock_timeout", + "description": "The error code identifying the type of error.", + "example": "lock_timeout", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "409": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "resource_type_update_in_progress", + "description": "The error code identifying the type of error.", + "example": "resource_type_update_in_progress", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Update a resource", + "tags": [ + "authorization" + ], + "x-mutually-exclusive-body-groups": { + "parent_resource": { + "optional": true, + "variants": { + "by_external_id": [ + "parent_resource_external_id", + "parent_resource_type_slug" + ], + "by_id": [ + "parent_resource_id" + ] + } + } + } + } + }, + "/authorization/resources/{resource_id}/organization_memberships": { + "get": { + "description": "Returns all organization memberships that have a specific permission on a resource instance. This is useful for answering \"Who can access this resource?\".", + "operationId": "AuthorizationResourcesController_listOrganizationMembershipsForResource", + "parameters": [ + { + "description": "The ID of the authorization resource.", + "in": "path", + "name": "resource_id", + "required": true, + "schema": { + "example": "authz_resource_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "xxx_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "xxx_01HXYZ987654321KJIHGFEDCBA", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "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).", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + }, + { + "description": "The permission slug to filter by. Only users with this permission on the resource are returned.", + "in": "query", + "name": "permission_slug", + "required": true, + "schema": { + "example": "document:edit", + "type": "string" + } + }, + { + "description": "Filter by assignment type. Use `direct` for direct assignments only, or `indirect` to include inherited assignments.", + "in": "query", + "name": "assignment", + "required": false, + "schema": { + "enum": [ + "direct", + "indirect" + ], + "example": "direct", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserlandUserOrganizationMembershipBaseWithUserList" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "bad_request", + "description": "The error code identifying the type of error.", + "example": "bad_request", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "List organization memberships for resource", + "tags": [ + "authorization" + ] + } + }, + "/authorization/resources/{resource_id}/role_assignments": { + "get": { + "description": "List all role assignments granted on a specific resource instance. Each assignment includes the organization membership it was granted to.", + "operationId": "AuthorizationRoleAssignmentsController_listRoleAssignmentsForResource", + "parameters": [ + { + "description": "The ID of the authorization resource.", + "in": "path", + "name": "resource_id", + "required": true, + "schema": { + "example": "authz_resource_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "xxx_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "xxx_01HXYZ987654321KJIHGFEDCBA", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "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).", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + }, + { + "description": "Filter assignments by the slug of the role.", + "in": "query", + "name": "role_slug", + "required": false, + "schema": { + "example": "editor", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserRoleAssignmentList" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "List role assignments for a resource", + "tags": [ + "authorization" + ] + } + }, + "/authorization/roles": { + "get": { + "description": "List all environment roles in priority order.", + "operationId": "AuthorizationRolesController_list", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoleList" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + } + }, + "summary": "List environment roles", + "tags": [ + "authorization" + ] + }, + "post": { + "description": "Create a new environment role.", + "operationId": "AuthorizationRolesController_create", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateRoleDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "An optional description of the role.", + "example": "Can edit resources", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier of the role.", + "example": "role_01EHQMYV6MBK39QC5PZXHY59C3", + "type": "string" + }, + "name": { + "description": "A descriptive name for the role.", + "example": "Editor", + "type": "string" + }, + "object": { + "const": "role", + "description": "Distinguishes the role object.", + "example": "role", + "type": "string" + }, + "permissions": { + "description": "The permission slugs assigned to the role.", + "example": [ + "posts:read", + "posts:write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "resource_type_slug": { + "description": "The slug of the resource type the role is scoped to.", + "example": "organization", + "type": "string" + }, + "slug": { + "description": "A unique slug for the role.", + "example": "editor", + "type": "string" + }, + "type": { + "description": "Whether the role is scoped to the environment or an organization (custom role).", + "enum": [ + "EnvironmentRole", + "OrganizationRole" + ], + "example": "EnvironmentRole", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "slug", + "object", + "id", + "name", + "description", + "type", + "resource_type_slug", + "permissions", + "created_at", + "updated_at" + ], + "type": "object", + "x-inline-with-overrides": true + } + } + }, + "description": "Created" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "bad_request", + "description": "The error code identifying the type of error.", + "example": "bad_request", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "409": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "role_slug_conflict", + "description": "The error code identifying the type of error.", + "example": "role_slug_conflict", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Create an environment role", + "tags": [ + "authorization" + ] + } + }, + "/authorization/roles/{slug}": { + "get": { + "description": "Get an environment role by its slug.", + "operationId": "AuthorizationRolesController_get", + "parameters": [ + { + "description": "The slug of the environment role.", + "in": "path", + "name": "slug", + "required": true, + "schema": { + "example": "admin", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Role" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get an environment role", + "tags": [ + "authorization" + ] + }, + "patch": { + "description": "Update an existing environment role.", + "operationId": "AuthorizationRolesController_update", + "parameters": [ + { + "description": "The slug of the environment role.", + "in": "path", + "name": "slug", + "required": true, + "schema": { + "example": "admin", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateRoleDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "An optional description of the role.", + "example": "Full administrative access to all resources", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier of the role.", + "example": "role_01EHQMYV6MBK39QC5PZXHY59C3", + "type": "string" + }, + "name": { + "description": "A descriptive name for the role.", + "example": "Super Administrator", + "type": "string" + }, + "object": { + "const": "role", + "description": "Distinguishes the role object.", + "example": "role", + "type": "string" + }, + "permissions": { + "description": "The permission slugs assigned to the role.", + "example": [ + "posts:read", + "posts:write" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "resource_type_slug": { + "description": "The slug of the resource type the role is scoped to.", + "example": "organization", + "type": "string" + }, + "slug": { + "description": "A unique slug for the role.", + "example": "admin", + "type": "string" + }, + "type": { + "description": "Whether the role is scoped to the environment or an organization (custom role).", + "enum": [ + "EnvironmentRole", + "OrganizationRole" + ], + "example": "EnvironmentRole", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "slug", + "object", + "id", + "name", + "description", + "type", + "resource_type_slug", + "permissions", + "created_at", + "updated_at" + ], + "type": "object", + "x-inline-with-overrides": true + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "bad_request", + "description": "The error code identifying the type of error.", + "example": "bad_request", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Update an environment role", + "tags": [ + "authorization" + ] + } + }, + "/authorization/roles/{slug}/permissions": { + "post": { + "description": "Add a single permission to an environment role. If the permission is already assigned to the role, this operation has no effect.", + "operationId": "AuthorizationRolePermissionsController_addPermission", + "parameters": [ + { + "description": "The slug of the environment role.", + "in": "path", + "name": "slug", + "required": true, + "schema": { + "example": "admin", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddRolePermissionDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "An optional description of the role.", + "example": "Can manage all resources", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier of the role.", + "example": "role_01EHQMYV6MBK39QC5PZXHY59C3", + "type": "string" + }, + "name": { + "description": "A descriptive name for the role.", + "example": "Admin", + "type": "string" + }, + "object": { + "const": "role", + "description": "Distinguishes the role object.", + "example": "role", + "type": "string" + }, + "permissions": { + "description": "The permission slugs assigned to the role.", + "example": [ + "reports:export" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "resource_type_slug": { + "description": "The slug of the resource type the role is scoped to.", + "example": "organization", + "type": "string" + }, + "slug": { + "description": "A unique slug for the role.", + "example": "admin", + "type": "string" + }, + "type": { + "description": "Whether the role is scoped to the environment or an organization (custom role).", + "enum": [ + "EnvironmentRole", + "OrganizationRole" + ], + "example": "EnvironmentRole", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "slug", + "object", + "id", + "name", + "description", + "type", + "resource_type_slug", + "permissions", + "created_at", + "updated_at" + ], + "type": "object", + "x-inline-with-overrides": true + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "bad_request", + "description": "The error code identifying the type of error.", + "example": "bad_request", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Add a permission to an environment role", + "tags": [ + "authorization" + ] + }, + "put": { + "description": "Replace all permissions on an environment role with the provided list.", + "operationId": "AuthorizationRolePermissionsController_setPermissions", + "parameters": [ + { + "description": "The slug of the environment role.", + "in": "path", + "name": "slug", + "required": true, + "schema": { + "example": "admin", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SetRolePermissionsDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "An optional description of the role.", + "example": "Can manage all resources", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Unique identifier of the role.", + "example": "role_01EHQMYV6MBK39QC5PZXHY59C3", + "type": "string" + }, + "name": { + "description": "A descriptive name for the role.", + "example": "Admin", + "type": "string" + }, + "object": { + "const": "role", + "description": "Distinguishes the role object.", + "example": "role", + "type": "string" + }, + "permissions": { + "description": "The permission slugs assigned to the role.", + "example": [ + "billing:read", + "billing:write", + "invoices:manage", + "reports:view" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "resource_type_slug": { + "description": "The slug of the resource type the role is scoped to.", + "example": "organization", + "type": "string" + }, + "slug": { + "description": "A unique slug for the role.", + "example": "admin", + "type": "string" + }, + "type": { + "description": "Whether the role is scoped to the environment or an organization (custom role).", + "enum": [ + "EnvironmentRole", + "OrganizationRole" + ], + "example": "EnvironmentRole", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "slug", + "object", + "id", + "name", + "description", + "type", + "resource_type_slug", + "permissions", + "created_at", + "updated_at" + ], + "type": "object", + "x-inline-with-overrides": true + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "bad_request", + "description": "The error code identifying the type of error.", + "example": "bad_request", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Set permissions for an environment role", + "tags": [ + "authorization" + ] + } + }, + "/client/token": { + "post": { + "description": "Generate a short-lived, session-bound token for the Client GraphQL API, scoped to an organization and user.", + "operationId": "ClientApiTokenController_issueClientApiToken", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ClientApiTokenDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ClientApiTokenResponse" + } + } + }, + "description": "Created" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Generate a Client API token", + "tags": [ + "client" + ] + } + }, + "/connect/applications": { + "get": { + "description": "List all Connect Applications in the current environment with optional filtering.", + "operationId": "ApplicationsController_list", + "parameters": [ + { + "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\"`.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "xxx_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "xxx_01HXYZ987654321KJIHGFEDCBA", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "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).", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + }, + { + "description": "Filter Connect Applications by organization ID.", + "in": "query", + "name": "organization_id", + "required": false, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConnectApplicationList" + } + } + }, + "description": "OK" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "List Connect Applications", + "tags": [ + "applications" + ] + }, + "post": { + "description": "Create a new Connect Application. Supports both OAuth and Machine-to-Machine (M2M) application types.", + "operationId": "ApplicationsController_create", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/CreateOAuthApplicationDto" + }, + { + "$ref": "#/components/schemas/CreateM2MApplicationDto" + } + ] + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConnectApplication" + } + } + }, + "description": "Created" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Create a Connect Application", + "tags": [ + "applications" + ] + } + }, + "/connect/applications/{id}": { + "delete": { + "description": "Delete an existing Connect Application.", + "operationId": "ApplicationsController_delete", + "parameters": [ + { + "description": "The application ID or client ID of the Connect Application.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "conn_app_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Delete a Connect Application", + "tags": [ + "applications" + ] + }, + "get": { + "description": "Retrieve details for a specific Connect Application by ID or client ID.", + "operationId": "ApplicationsController_find", + "parameters": [ + { + "description": "The application ID or client ID of the Connect Application.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "conn_app_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConnectApplication" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get a Connect Application", + "tags": [ + "applications" + ] + }, + "put": { + "description": "Update an existing Connect Application. For OAuth applications, you can update redirect URIs. For all applications, you can update the name, description, and scopes.", + "operationId": "ApplicationsController_update", + "parameters": [ + { + "description": "The application ID or client ID of the Connect Application.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "conn_app_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateOAuthApplicationDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConnectApplication" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Update a Connect Application", + "tags": [ + "applications" + ] + } + }, + "/connect/applications/{id}/client_secrets": { + "get": { + "description": "List all client secrets associated with a Connect Application.", + "operationId": "ApplicationCredentialsController_list", + "parameters": [ + { + "description": "The application ID or client ID of the Connect Application.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "conn_app_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "The unique ID of the client secret.", + "example": "secret_01J9Q2Z3X4Y5W6V7U8T9S0R1Q", + "type": "string" + }, + "last_used_at": { + "description": "The timestamp when the client secret was last used, or null if never used.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "object": { + "const": "connect_application_secret", + "description": "Distinguishes the connect application secret object.", + "type": "string" + }, + "secret_hint": { + "description": "A hint showing the last few characters of the secret value.", + "example": "abc123", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "secret_hint", + "last_used_at", + "created_at", + "updated_at" + ], + "type": "object" + }, + "type": "array" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "List Client Secrets for a Connect Application", + "tags": [ + "application.client-secrets" + ] + }, + "post": { + "description": "Create new secrets for a Connect Application.", + "operationId": "ApplicationCredentialsController_create", + "parameters": [ + { + "description": "The application ID or client ID of the Connect Application.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "conn_app_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateApplicationSecretDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NewConnectApplicationSecret" + } + } + }, + "description": "Created" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Create a new client secret for a Connect Application", + "tags": [ + "application.client-secrets" + ] + } + }, + "/connect/client_secrets/{id}": { + "delete": { + "description": "Delete (revoke) an existing client secret.", + "operationId": "ApplicationCredentialsController_delete", + "parameters": [ + { + "description": "The unique ID of the client secret.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "secret_01J9Q2Z3X4Y5W6V7U8T9S0R1Q", + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Delete a Client Secret", + "tags": [ + "application.client-secrets" + ] + } + }, + "/connections": { + "get": { + "description": "Get a list of all of your existing connections matching the criteria specified.", + "operationId": "ConnectionsController_list", + "parameters": [ + { + "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.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "obj_1234567890", + "type": "string" + } + }, + { + "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.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "obj_1234567890", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "description": "Order the results by the creation time.", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + }, + { + "description": "Filter Connections by their type.", + "in": "query", + "name": "connection_type", + "required": false, + "schema": { + "enum": [ + "ADFSSAML", + "AdpOidc", + "AppleOAuth", + "Auth0SAML", + "AzureSAML", + "BitbucketOAuth", + "CasSAML", + "CloudflareSAML", + "ClassLinkSAML", + "CleverOIDC", + "CyberArkSAML", + "DiscordOAuth", + "DuoSAML", + "EntraIdOIDC", + "GenericOIDC", + "GenericSAML", + "GithubOAuth", + "GitLabOAuth", + "GoogleOAuth", + "GoogleOIDC", + "GoogleSAML", + "IntuitOAuth", + "JumpCloudSAML", + "KeycloakSAML", + "LastPassSAML", + "LinkedInOAuth", + "LoginGovOidc", + "MagicLink", + "MicrosoftOAuth", + "MiniOrangeSAML", + "NetIqSAML", + "OktaOIDC", + "OktaSAML", + "OneLoginSAML", + "OracleSAML", + "PingFederateSAML", + "PingOneSAML", + "RipplingSAML", + "SalesforceSAML", + "ShibbolethGenericSAML", + "ShibbolethSAML", + "SimpleSamlPhpSAML", + "SalesforceOAuth", + "SlackOAuth", + "VercelMarketplaceOAuth", + "VercelOAuth", + "VMwareSAML", + "XeroOAuth" + ], + "example": "GithubOAuth", + "type": "string" + } + }, + { + "description": "Filter Connections by their associated domain.", + "in": "query", + "name": "domain", + "required": false, + "schema": { + "example": "foo-corp.com", + "type": "string" + } + }, + { + "description": "Filter Connections by their associated organization.", + "in": "query", + "name": "organization_id", + "required": false, + "schema": { + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + } + }, + { + "description": "Searchable text to match against Connection names.", + "in": "query", + "name": "search", + "required": false, + "schema": { + "example": "Foo Corp", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConnectionList" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "List Connections", + "tags": [ + "connections" + ] + } + }, + "/connections/{id}": { + "delete": { + "description": "Permanently deletes an existing connection. It cannot be undone.", + "operationId": "ConnectionsController_delete", + "parameters": [ + { + "description": "Unique identifier for the Connection.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "conn_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + }, + "204": { + "description": "No Content" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Delete a Connection", + "tags": [ + "connections" + ] + }, + "get": { + "description": "Get the details of an existing connection.", + "operationId": "ConnectionsController_find", + "parameters": [ + { + "description": "Unique identifier for the Connection.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "conn_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Connection" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get a Connection", + "tags": [ + "connections" + ] + } + }, + "/data-integrations/{slug}/authorize": { + "post": { + "description": "Generates an OAuth authorization URL to initiate the connection flow for a user. Redirect the user to the returned URL to begin the OAuth flow with the third-party provider.", + "operationId": "DataIntegrationsController_getDataIntegrationAuthorizeUrl", + "parameters": [ + { + "description": "The slug identifier of the provider (e.g., `github`, `slack`, `notion`).", + "in": "path", + "name": "slug", + "required": true, + "schema": { + "example": "github", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "organization_id": { + "description": "An organization ID to scope the authorization to a specific organization.", + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "return_to": { + "description": "The URL to redirect the user to after authorization.", + "example": "https://example.com/callback", + "format": "uri", + "type": "string" + }, + "user_id": { + "description": "The ID of the user to authorize.", + "example": "user_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + }, + "required": [ + "user_id" + ], + "type": "object" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DataIntegrationAuthorizeUrlResponse" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get authorization URL", + "tags": [ + "pipes" + ] + } + }, + "/data-integrations/{slug}/token": { + "post": { + "description": "Fetches a valid OAuth access token for a user's connected account. WorkOS automatically handles token refresh, ensuring you always receive a valid, non-expired token.", + "operationId": "DataIntegrationsController_getUserlandUserToken", + "parameters": [ + { + "description": "The identifier of the integration.", + "in": "path", + "name": "slug", + "required": true, + "schema": { + "example": "github", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "organization_id": { + "description": "An [Organization](/reference/organization) identifier. Optional parameter to scope the connection to a specific organization.", + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "user_id": { + "description": "A [User](/reference/authkit/user) identifier.", + "example": "user_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + }, + "required": [ + "user_id" + ], + "type": "object" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DataIntegrationAccessTokenResponse" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Data integration not found for the given provider slug." + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthMethodMismatchError" + } + } + }, + "description": "The matched installation uses a different auth method than this endpoint expects." + } + }, + "summary": "Get an access token for a connected account", + "tags": [ + "pipes" + ] + } + }, + "/directories": { + "get": { + "description": "Get a list of all of your existing directories matching the criteria specified.", + "operationId": "DirectoriesController_list", + "parameters": [ + { + "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.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "obj_1234567890", + "type": "string" + } + }, + { + "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.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "obj_1234567890", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "description": "Order the results by the creation time.", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + }, + { + "description": "Filter Directories by their associated organization.", + "in": "query", + "name": "organization_id", + "required": false, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + }, + { + "description": "Searchable text to match against Directory names.", + "in": "query", + "name": "search", + "required": false, + "schema": { + "example": "Foo Corp", + "type": "string" + } + }, + { + "deprecated": true, + "description": "Filter Directories by their associated domain.", + "in": "query", + "name": "domain", + "required": false, + "schema": { + "example": "foo-corp.com", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DirectoryList" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "List Directories", + "tags": [ + "directories" + ] + } + }, + "/directories/{id}": { + "delete": { + "description": "Permanently deletes an existing directory. It cannot be undone.", + "operationId": "DirectoriesController_deleteDirectory", + "parameters": [ + { + "description": "Unique identifier for the Directory.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "directory_01ECAZ4NV9QMV47GW873HDCX74", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + }, + "202": { + "content": { + "application/json": { + "schema": {} + } + }, + "description": "" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + } + }, + "summary": "Delete a Directory", + "tags": [ + "directories" + ] + }, + "get": { + "description": "Get the details of an existing directory.", + "operationId": "DirectoriesController_find", + "parameters": [ + { + "description": "Unique identifier for the Directory.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "directory_01ECAZ4NV9QMV47GW873HDCX74", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Directory" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get a Directory", + "tags": [ + "directories" + ] + } + }, + "/directory_groups": { + "get": { + "description": "Get a list of all of existing directory groups matching the criteria specified.", + "operationId": "DirectoryGroupsController_list", + "parameters": [ + { + "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\"`.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "xxx_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "xxx_01HXYZ987654321KJIHGFEDCBA", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "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).", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + }, + { + "description": "Unique identifier of the WorkOS Directory. This value can be obtained from the WorkOS dashboard or from the WorkOS API.", + "in": "query", + "name": "directory", + "required": false, + "schema": { + "example": "directory_01ECAZ4NV9QMV47GW873HDCX74", + "type": "string" + } + }, + { + "description": "Unique identifier of the WorkOS Directory User. This value can be obtained from the WorkOS API.", + "in": "query", + "name": "user", + "required": false, + "schema": { + "example": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DirectoryGroupList" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "List Directory Groups", + "tags": [ + "directory-groups" + ] + } + }, + "/directory_groups/{id}": { + "get": { + "description": "Get the details of an existing Directory Group.", + "operationId": "DirectoryGroupsController_find", + "parameters": [ + { + "description": "Unique identifier for the Directory Group.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "directory_group_01E1JJS84MFPPQ3G655FHTKX6Z", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DirectoryGroup" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get a Directory Group", + "tags": [ + "directory-groups" + ] + } + }, + "/directory_users": { + "get": { + "description": "Get a list of all of existing Directory Users matching the criteria specified.", + "operationId": "DirectoryUsersController_list", + "parameters": [ + { + "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\"`.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "xxx_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "xxx_01HXYZ987654321KJIHGFEDCBA", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "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).", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + }, + { + "description": "Unique identifier of the WorkOS Directory. This value can be obtained from the WorkOS dashboard or from the WorkOS API.", + "in": "query", + "name": "directory", + "required": false, + "schema": { + "example": "directory_01ECAZ4NV9QMV47GW873HDCX74", + "type": "string" + } + }, + { + "description": "Unique identifier of the WorkOS Directory Group. This value can be obtained from the WorkOS API.", + "in": "query", + "name": "group", + "required": false, + "schema": { + "example": "directory_group_01E64QTDNS0EGJ0FMCVY9BWGZT", + "type": "string" + } + }, + { + "description": "Filter Directory Users by the identity provider's unique identifier (`idp_id`). Requires the `directory` parameter to also be provided.", + "in": "query", + "name": "idp_id", + "required": false, + "schema": { + "example": "2836", + "type": "string" + } + }, + { + "description": "Filter Directory Users by their primary email address. Requires the `directory` parameter to also be provided.", + "in": "query", + "name": "email", + "required": false, + "schema": { + "example": "jane.doe@example.com", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DirectoryUserList" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + }, + "429": { + "content": { + "application/json": { + "schema": { + "const": "Ratelimited", + "type": "string" + } + } + }, + "description": "" + } + }, + "summary": "List Directory Users", + "tags": [ + "directory-users" + ] + } + }, + "/directory_users/{id}": { + "get": { + "description": "Get the details of an existing Directory User.", + "operationId": "DirectoryUsersController_find", + "parameters": [ + { + "description": "Unique identifier for the Directory User.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DirectoryUserWithGroups" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get a Directory User", + "tags": [ + "directory-users" + ] + } + }, + "/events": { + "get": { + "description": "List events for the current environment.", + "operationId": "EventsController_list", + "parameters": [ + { + "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\"`.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "xxx_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "xxx_01HXYZ987654321KJIHGFEDCBA", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "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).", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + }, + { + "description": "Filter events by one or more event types (e.g. `dsync.user.created`).", + "explode": false, + "in": "query", + "name": "events", + "required": false, + "schema": { + "example": [ + "dsync.user.created", + "dsync.user.updated" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "style": "form" + }, + { + "description": "ISO-8601 date string to filter events created after this date.", + "in": "query", + "name": "range_start", + "required": false, + "schema": { + "example": "2025-01-01T00:00:00Z", + "type": "string" + } + }, + { + "description": "ISO-8601 date string to filter events created before this date.", + "in": "query", + "name": "range_end", + "required": false, + "schema": { + "example": "2025-12-31T23:59:59Z", + "type": "string" + } + }, + { + "description": "Filter events by the [Organization](/reference/organization) that the event is associated with.", + "in": "query", + "name": "organization_id", + "required": false, + "schema": { + "example": "org_01EHQMYV6MBK39QC5PZXHY59C3", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventList" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "errors": { + "description": "The list of validation errors.", + "items": { + "properties": { + "code": { + "description": "The validation error code.", + "example": "required", + "type": "string" + }, + "field": { + "description": "The field that failed validation.", + "example": "events", + "type": "string" + } + }, + "required": [ + "code", + "field" + ], + "type": "object" + }, + "type": "array" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "errors", + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "List events", + "tags": [ + "events" + ] + } + }, + "/feature-flags": { + "get": { + "description": "Get a list of all of your existing feature flags matching the criteria specified.", + "operationId": "FeatureFlagsController_list", + "parameters": [ + { + "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.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "obj_1234567890", + "type": "string" + } + }, + { + "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.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "obj_1234567890", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "description": "Order the results by the creation time.", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FlagList" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "invalid_request_parameters", + "description": "The error code identifying the type of error.", + "example": "invalid_request_parameters", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "List feature flags", + "tags": [ + "feature-flags" + ] + } + }, + "/feature-flags/{slug}": { + "get": { + "description": "Get the details of an existing feature flag by its slug.", + "operationId": "FeatureFlagsController_findBySlug", + "parameters": [ + { + "description": "A unique key to reference the Feature Flag.", + "in": "path", + "name": "slug", + "required": true, + "schema": { + "example": "advanced-analytics", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Flag" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get a feature flag", + "tags": [ + "feature-flags" + ] + } + }, + "/feature-flags/{slug}/disable": { + "put": { + "description": "Disables a feature flag in the current environment.", + "operationId": "FeatureFlagsController_disableFlag", + "parameters": [ + { + "description": "A unique key to reference the Feature Flag.", + "in": "path", + "name": "slug", + "required": true, + "schema": { + "example": "advanced-analytics", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "default_value": { + "description": "The value returned for users and organizations who don't match any configured targeting rules.", + "example": false, + "type": "boolean" + }, + "description": { + "description": "A description for the Feature Flag.", + "example": "Enable advanced analytics dashboard feature", + "type": [ + "string", + "null" + ] + }, + "enabled": { + "description": "Specifies whether the Feature Flag is active for the current environment.", + "example": false, + "type": "boolean" + }, + "id": { + "description": "Unique identifier of the Feature Flag.", + "example": "flag_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "name": { + "description": "A descriptive name for the Feature Flag. This field does not need to be unique.", + "example": "Advanced Analytics", + "type": "string" + }, + "object": { + "const": "feature_flag", + "description": "Distinguishes the Feature Flag object.", + "type": "string" + }, + "owner": { + "description": "The owner of the Feature Flag.", + "oneOf": [ + { + "properties": { + "email": { + "description": "The email address of the flag owner.", + "example": "jane@example.com", + "type": "string" + }, + "first_name": { + "description": "The first name of the flag owner.", + "example": "Jane", + "type": [ + "string", + "null" + ] + }, + "last_name": { + "description": "The last name of the flag owner.", + "example": "Doe", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "first_name", + "last_name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "slug": { + "description": "A unique key to reference the Feature Flag.", + "example": "advanced-analytics", + "type": "string" + }, + "tags": { + "description": "Labels assigned to the Feature Flag for categorizing and filtering.", + "example": [ + "reports" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "slug", + "name", + "description", + "owner", + "tags", + "enabled", + "default_value", + "created_at", + "updated_at" + ], + "type": "object", + "x-inline-with-overrides": true + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Disable a feature flag", + "tags": [ + "feature-flags" + ] + } + }, + "/feature-flags/{slug}/enable": { + "put": { + "description": "Enables a feature flag in the current environment.", + "operationId": "FeatureFlagsController_enableFlag", + "parameters": [ + { + "description": "A unique key to reference the Feature Flag.", + "in": "path", + "name": "slug", + "required": true, + "schema": { + "example": "advanced-analytics", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "default_value": { + "description": "The value returned for users and organizations who don't match any configured targeting rules.", + "example": false, + "type": "boolean" + }, + "description": { + "description": "A description for the Feature Flag.", + "example": "Enable advanced analytics dashboard feature", + "type": [ + "string", + "null" + ] + }, + "enabled": { + "description": "Specifies whether the Feature Flag is active for the current environment.", + "example": true, + "type": "boolean" + }, + "id": { + "description": "Unique identifier of the Feature Flag.", + "example": "flag_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "name": { + "description": "A descriptive name for the Feature Flag. This field does not need to be unique.", + "example": "Advanced Analytics", + "type": "string" + }, + "object": { + "const": "feature_flag", + "description": "Distinguishes the Feature Flag object.", + "type": "string" + }, + "owner": { + "description": "The owner of the Feature Flag.", + "oneOf": [ + { + "properties": { + "email": { + "description": "The email address of the flag owner.", + "example": "jane@example.com", + "type": "string" + }, + "first_name": { + "description": "The first name of the flag owner.", + "example": "Jane", + "type": [ + "string", + "null" + ] + }, + "last_name": { + "description": "The last name of the flag owner.", + "example": "Doe", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "first_name", + "last_name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "slug": { + "description": "A unique key to reference the Feature Flag.", + "example": "advanced-analytics", + "type": "string" + }, + "tags": { + "description": "Labels assigned to the Feature Flag for categorizing and filtering.", + "example": [ + "reports" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "slug", + "name", + "description", + "owner", + "tags", + "enabled", + "default_value", + "created_at", + "updated_at" + ], + "type": "object", + "x-inline-with-overrides": true + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Enable a feature flag", + "tags": [ + "feature-flags" + ] + } + }, + "/feature-flags/{slug}/targets/{resourceId}": { + "delete": { + "description": "Removes a target from the feature flag's target list in the current environment. Currently, supported targets include users and organizations.", + "operationId": "FlagTargetsController_deleteTarget", + "parameters": [ + { + "description": "The resource ID in format \"user_\" or \"org_\".", + "in": "path", + "name": "resourceId", + "required": true, + "schema": { + "example": "user_01234567890abcdef", + "type": "string" + } + }, + { + "description": "The unique slug identifier of the feature flag.", + "in": "path", + "name": "slug", + "required": true, + "schema": { + "example": "beta-feature", + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Target deleted successfully." + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "description": "The error code identifying the type of error.", + "example": "invalid_resource_id_format", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Invalid resource id", + "type": "string" + }, + "statusCode": { + "description": "The HTTP status code.", + "example": 400, + "type": "number" + } + }, + "type": "object" + } + } + }, + "description": "Invalid resourceId format." + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Access denied." + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Feature flag, user, or organization not found." + } + }, + "summary": "Remove a feature flag target", + "tags": [ + "feature-flags.targets" + ] + }, + "post": { + "description": "Enables a feature flag for a specific target in the current environment. Currently, supported targets include users and organizations.", + "operationId": "FlagTargetsController_createTarget", + "parameters": [ + { + "description": "The resource ID in format \"user_\" or \"org_\".", + "in": "path", + "name": "resourceId", + "required": true, + "schema": { + "example": "user_01234567890abcdef", + "type": "string" + } + }, + { + "description": "The unique slug identifier of the feature flag.", + "in": "path", + "name": "slug", + "required": true, + "schema": { + "example": "beta-feature", + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Target created or updated successfully." + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "description": "The error code identifying the type of error.", + "example": "invalid_resource_id_format", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Invalid resource id", + "type": "string" + }, + "statusCode": { + "description": "The HTTP status code.", + "example": 400, + "type": "number" + } + }, + "type": "object" + } + } + }, + "description": "Invalid resourceId format." + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Access denied." + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Feature flag, user, or organization not found." + } + }, + "summary": "Add a feature flag target", + "tags": [ + "feature-flags.targets" + ] + } + }, + "/organization_domains": { + "post": { + "description": "Creates a new Organization Domain.", + "operationId": "OrganizationDomainsController_create", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateOrganizationDomainDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "domain": { + "description": "Domain for the organization domain.", + "example": "foo-corp.com", + "type": "string" + }, + "id": { + "description": "Unique identifier of the organization domain.", + "example": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", + "type": "string" + }, + "object": { + "const": "organization_domain", + "description": "Distinguishes the organization domain object.", + "type": "string" + }, + "organization_id": { + "description": "ID of the parent Organization.", + "example": "org_01EHQMYV6MBK39QC5PZXHY59C3", + "type": "string" + }, + "state": { + "description": "Verification state of the domain.", + "enum": [ + "failed", + "legacy_verified", + "pending", + "unverified", + "verified" + ], + "example": "pending", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "verification_prefix": { + "description": "The prefix used in DNS verification.", + "example": "superapp-domain-verification-z3kjny", + "type": "string" + }, + "verification_strategy": { + "description": "Strategy used to verify the domain.", + "enum": [ + "dns", + "manual" + ], + "example": "dns", + "type": "string" + }, + "verification_token": { + "description": "Validation token to be used in DNS TXT record.", + "example": "m5Oztg3jdK4NJLgs8uIlIprMw", + "type": "string" + } + }, + "required": [ + "object", + "id", + "organization_id", + "domain", + "created_at", + "updated_at" + ], + "type": "object", + "x-inline-with-overrides": true + } + } + }, + "description": "Created" + }, + "409": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "domain_already_exists", + "description": "The error code identifying the type of error.", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Domain already exists for this organization.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "" + } + }, + "summary": "Create an Organization Domain", + "tags": [ + "organization-domains" + ] + } + }, + "/organization_domains/{id}": { + "delete": { + "description": "Permanently deletes an organization domain. It cannot be undone.", + "operationId": "OrganizationDomainsController_delete", + "parameters": [ + { + "description": "Unique identifier of the organization domain.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Organization domain deleted successfully." + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Delete an Organization Domain", + "tags": [ + "organization-domains" + ] + }, + "get": { + "description": "Get the details of an existing organization domain.", + "operationId": "OrganizationDomainsController_get", + "parameters": [ + { + "description": "Unique identifier of the organization domain.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganizationDomainStandAlone" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get an Organization Domain", + "tags": [ + "organization-domains" + ] + } + }, + "/organization_domains/{id}/verify": { + "post": { + "description": "Initiates verification process for an Organization Domain.", + "operationId": "OrganizationDomainsController_verify", + "parameters": [ + { + "description": "Unique identifier of the organization domain.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", + "type": "string" + } + } + ], + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganizationDomainStandAlone" + } + } + }, + "description": "Created" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "domain_already_verified", + "description": "The error code identifying the type of error.", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Domain is already verified.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Verify an Organization Domain", + "tags": [ + "organization-domains" + ] + } + }, + "/organizations": { + "get": { + "description": "Get a list of all of your existing organizations matching the criteria specified.", + "operationId": "OrganizationsController_list", + "parameters": [ + { + "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\"`.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "xxx_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "xxx_01HXYZ987654321KJIHGFEDCBA", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "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).", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + }, + { + "description": "The domains of an Organization. Any Organization with a matching domain will be returned.", + "explode": false, + "in": "query", + "name": "domains", + "required": false, + "schema": { + "example": [ + "foo-corp.com" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "style": "form" + }, + { + "description": "Searchable text for an Organization. Matches against the organization name.", + "in": "query", + "name": "search", + "required": false, + "schema": { + "example": "Acme Corp", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganizationList" + } + } + }, + "description": "OK" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "List Organizations", + "tags": [ + "organizations" + ] + }, + "post": { + "description": "Creates a new organization in the current environment.", + "operationId": "OrganizationsController_create", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganizationDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "example": { + "allow_profiles_outside_organization": false, + "created_at": "2026-01-15T12:00:00.000Z", + "domains": [ + { + "created_at": "2026-01-15T12:00:00.000Z", + "domain": "foo-corp.com", + "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", + "object": "organization_domain", + "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", + "state": "pending", + "updated_at": "2026-01-15T12:00:00.000Z", + "verification_prefix": "superapp-domain-verification-z3kjny", + "verification_strategy": "dns", + "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw" + } + ], + "external_id": "ext_12345", + "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "metadata": { + "tier": "diamond" + }, + "name": "Foo Corp", + "object": "organization", + "stripe_customer_id": "cus_R9qWAGMQ6nGE7V", + "updated_at": "2026-01-15T12:00:00.000Z" + }, + "schema": { + "$ref": "#/components/schemas/Organization" + } + } + }, + "description": "Created" + }, + "400": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "code": { + "const": "invalid_metadata", + "description": "The error code identifying the type of error.", + "example": "invalid_metadata", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "external_id_already_used", + "description": "The error code identifying the type of error.", + "example": "external_id_already_used", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + ] + } + } + }, + "description": "Bad Request" + }, + "409": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Create an Organization", + "tags": [ + "organizations" + ] + } + }, + "/organizations/external_id/{external_id}": { + "get": { + "description": "Get the details of an existing organization by an [external identifier](/authkit/metadata/external-identifiers).", + "operationId": "OrganizationsController_getByExternalId", + "parameters": [ + { + "description": "The external ID of the Organization.", + "in": "path", + "name": "external_id", + "required": true, + "schema": { + "example": "2fe01467-f7ea-4dd2-8b79-c2b4f56d0191", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Organization" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get an Organization by External ID", + "tags": [ + "organizations" + ] + } + }, + "/organizations/{id}": { + "delete": { + "description": "Permanently deletes an organization in the current environment. It cannot be undone.", + "operationId": "OrganizationsController_deleteOrganization", + "parameters": [ + { + "description": "Unique identifier of the Organization.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + }, + "202": { + "description": "" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + } + }, + "summary": "Delete an Organization", + "tags": [ + "organizations" + ] + }, + "get": { + "description": "Get the details of an existing organization.", + "operationId": "OrganizationsController_find", + "parameters": [ + { + "description": "Unique identifier of the Organization.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Organization" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get an Organization", + "tags": [ + "organizations" + ] + }, + "put": { + "description": "Updates an organization in the current environment.", + "operationId": "OrganizationsController_updateOrganization", + "parameters": [ + { + "description": "Unique identifier of the Organization.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateOrganizationDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "allow_profiles_outside_organization": false, + "created_at": "2026-01-15T12:00:00.000Z", + "domains": [ + { + "created_at": "2026-01-15T12:00:00.000Z", + "domain": "foo-corp.com", + "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", + "object": "organization_domain", + "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", + "state": "pending", + "updated_at": "2026-01-15T12:00:00.000Z", + "verification_prefix": "superapp-domain-verification-z3kjny", + "verification_strategy": "dns", + "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw" + } + ], + "external_id": "2fe01467-f7ea-4dd2-8b79-c2b4f56d0191", + "id": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "metadata": { + "tier": "diamond" + }, + "name": "Foo Corp", + "object": "organization", + "stripe_customer_id": "cus_R9qWAGMQ6nGE7V", + "updated_at": "2026-01-15T12:00:00.000Z" + }, + "schema": { + "$ref": "#/components/schemas/Organization" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "code": { + "const": "invalid_metadata", + "description": "The error code identifying the type of error.", + "example": "invalid_metadata", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "external_id_already_used", + "description": "The error code identifying the type of error.", + "example": "external_id_already_used", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "stripe_customer_id_already_used", + "description": "The error code identifying the type of error.", + "example": "stripe_customer_id_already_used", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + ] + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "409": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Update an Organization", + "tags": [ + "organizations" + ] + } + }, + "/organizations/{id}/audit_log_configuration": { + "get": { + "description": "Get the unified view of audit log trail and stream configuration for an organization.", + "operationId": "OrganizationsController_getAuditLogConfiguration", + "parameters": [ + { + "description": "Unique identifier of the Organization.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuditLogConfiguration" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get Audit Log Configuration", + "tags": [ + "organizations" + ] + } + }, + "/organizations/{id}/audit_logs_retention": { + "get": { + "description": "Get the configured event retention period for the given Organization.", + "operationId": "AuditLogsRetentionController_auditLogsRetention", + "parameters": [ + { + "description": "Unique identifier of the Organization.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuditLogsRetentionJson" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get Retention", + "tags": [ + "audit-logs" + ] + }, + "put": { + "description": "Set the event retention period for the given Organization.", + "operationId": "AuditLogsRetentionController_updateAuditLogsRetention", + "parameters": [ + { + "description": "Unique identifier of the Organization.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateAuditLogsRetentionDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuditLogsRetentionJson" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Set Retention", + "tags": [ + "audit-logs" + ] + } + }, + "/organizations/{organizationId}/api_keys": { + "get": { + "description": "Get a list of all API keys for an organization.", + "operationId": "OrganizationApiKeysController_list", + "parameters": [ + { + "description": "Unique identifier of the Organization.", + "in": "path", + "name": "organizationId", + "required": true, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + }, + { + "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.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "obj_1234567890", + "type": "string" + } + }, + { + "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.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "obj_1234567890", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "description": "Order the results by the creation time.", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganizationApiKeyList" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "List API keys for an organization", + "tags": [ + "organizations.api_keys" + ] + }, + "post": { + "description": "Create a new API key for an organization.", + "operationId": "OrganizationApiKeysController_create", + "parameters": [ + { + "description": "Unique identifier of the Organization.", + "in": "path", + "name": "organizationId", + "required": true, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateOrganizationApiKeyDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganizationApiKeyWithValue" + } + } + }, + "description": "Created" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "errors": { + "description": "The list of validation errors.", + "items": { + "properties": { + "code": { + "description": "The validation error code.", + "example": "required", + "type": "string" + }, + "field": { + "description": "The field that failed validation.", + "example": "event.action", + "type": "string" + } + }, + "required": [ + "code", + "field" + ], + "type": "object" + }, + "type": "array" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "message", + "errors" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Create an API key for an organization", + "tags": [ + "organizations.api_keys" + ] + } + }, + "/organizations/{organizationId}/data_integration_configurations": { + "get": { + "description": "Returns a list of all providers available to the specified organization, along with any configured custom OAuth scopes, enabled state, and organization-managed credentials where applicable.", + "operationId": "ProviderController_listForOrganization", + "parameters": [ + { + "description": "An [Organization](/reference/organization) identifier to list provider configurations for.", + "in": "path", + "name": "organizationId", + "required": true, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DataIntegrationConfigurationListResponse" + } + } + }, + "description": "A list of provider configurations for the organization." + }, + "401": { + "description": "The request is missing a valid API key." + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "The organization was not found." + } + }, + "summary": "List providers for an organization", + "tags": [ + "pipes.provider" + ], + "x-feature-flag": "pipes-org-overrides" + } + }, + "/organizations/{organizationId}/data_integration_configurations/{slug}": { + "put": { + "description": "Creates or updates an organization's provider configuration. Use this endpoint to enable or disable a provider, set custom OAuth scopes, or supply organization-managed OAuth credentials.", + "operationId": "ProviderController_configure", + "parameters": [ + { + "description": "An [Organization](/reference/organization) identifier to configure the provider for.", + "in": "path", + "name": "organizationId", + "required": true, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + }, + { + "description": "The slug identifier of the provider to configure (e.g., `github`, `slack`, `notion`).", + "in": "path", + "name": "slug", + "required": true, + "schema": { + "example": "github", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConfigureDataIntegrationBody" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DataIntegrationConfigurationResponse" + } + } + }, + "description": "The provider configuration that was created or updated." + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "The request body is invalid. Possible reasons: the body is empty (at least one of `enabled`, `scopes`, or `client_id` must be provided); `client_id` and `client_secret` are not provided together; or `client_id`/`client_secret` were supplied for a provider that does not support organization-managed credentials." + }, + "401": { + "description": "The request is missing a valid API key." + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "The organization or provider was not found." + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "One or more of the supplied `scopes` are not valid for the provider. Only scopes configured on the provider may be used." + } + }, + "summary": "Configure a provider for an organization", + "tags": [ + "pipes.provider" + ], + "x-feature-flag": "pipes-org-overrides" + } + }, + "/organizations/{organizationId}/feature-flags": { + "get": { + "description": "Get a list of all enabled feature flags for an organization.", + "operationId": "OrganizationFeatureFlagsController_list", + "parameters": [ + { + "description": "Unique identifier of the Organization.", + "in": "path", + "name": "organizationId", + "required": true, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + }, + { + "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.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "obj_1234567890", + "type": "string" + } + }, + { + "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.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "obj_1234567890", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "description": "Order the results by the creation time.", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FlagList" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "List enabled feature flags for an organization", + "tags": [ + "organizations.feature-flags" + ] + } + }, + "/organizations/{organizationId}/groups": { + "get": { + "description": "Get a paginated list of groups within an organization.", + "operationId": "GroupsController_list", + "parameters": [ + { + "description": "The ID of the organization.", + "in": "path", + "name": "organizationId", + "required": true, + "schema": { + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "xxx_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "xxx_01HXYZ987654321KJIHGFEDCBA", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "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).", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GroupList" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "List groups", + "tags": [ + "groups" + ], + "x-feature-flag": "user-groups-enabled" + }, + "post": { + "description": "Create a new group within an organization.", + "operationId": "GroupsController_create", + "parameters": [ + { + "description": "The ID of the organization.", + "in": "path", + "name": "organizationId", + "required": true, + "schema": { + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateGroupDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Group" + } + } + }, + "description": "Created" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "bad_request", + "description": "The error code identifying the type of error.", + "example": "bad_request", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Create a group", + "tags": [ + "groups" + ], + "x-feature-flag": "user-groups-enabled" + } + }, + "/organizations/{organizationId}/groups/{groupId}": { + "delete": { + "description": "Delete a group from an organization.", + "operationId": "GroupsController_delete", + "parameters": [ + { + "description": "The ID of the organization.", + "in": "path", + "name": "organizationId", + "required": true, + "schema": { + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + } + }, + { + "description": "The ID of the group.", + "in": "path", + "name": "groupId", + "required": true, + "schema": { + "example": "group_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Delete a group", + "tags": [ + "groups" + ], + "x-feature-flag": "user-groups-enabled" + }, + "get": { + "description": "Retrieve a group by its ID within an organization.", + "operationId": "GroupsController_get", + "parameters": [ + { + "description": "The ID of the organization.", + "in": "path", + "name": "organizationId", + "required": true, + "schema": { + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + } + }, + { + "description": "The ID of the group.", + "in": "path", + "name": "groupId", + "required": true, + "schema": { + "example": "group_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Group" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get a group", + "tags": [ + "groups" + ], + "x-feature-flag": "user-groups-enabled" + }, + "patch": { + "description": "Update an existing group. Only the fields provided in the request body will be updated.", + "operationId": "GroupsController_update", + "parameters": [ + { + "description": "The ID of the organization.", + "in": "path", + "name": "organizationId", + "required": true, + "schema": { + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + } + }, + { + "description": "The ID of the group.", + "in": "path", + "name": "groupId", + "required": true, + "schema": { + "example": "group_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateGroupDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Group" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "bad_request", + "description": "The error code identifying the type of error.", + "example": "bad_request", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Update a group", + "tags": [ + "groups" + ], + "x-feature-flag": "user-groups-enabled" + } + }, + "/organizations/{organizationId}/groups/{groupId}/organization-memberships": { + "get": { + "description": "Get a list of organization memberships in a group.", + "operationId": "GroupMembershipsController_listMembers", + "parameters": [ + { + "description": "Unique identifier of the Organization.", + "in": "path", + "name": "organizationId", + "required": true, + "schema": { + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + } + }, + { + "description": "Unique identifier of the Group.", + "in": "path", + "name": "groupId", + "required": true, + "schema": { + "example": "group_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "xxx_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "xxx_01HXYZ987654321KJIHGFEDCBA", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "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).", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserlandUserOrganizationMembershipBaseList" + } + } + }, + "description": "OK" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "List Group members", + "tags": [ + "groups" + ], + "x-feature-flag": "user-groups-enabled" + }, + "post": { + "description": "Add an organization membership to a group.", + "operationId": "GroupMembershipsController_addMember", + "parameters": [ + { + "description": "Unique identifier of the Organization.", + "in": "path", + "name": "organizationId", + "required": true, + "schema": { + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + } + }, + { + "description": "Unique identifier of the Group.", + "in": "path", + "name": "groupId", + "required": true, + "schema": { + "example": "group_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateGroupMembershipDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Group" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "group_membership_limit_exceeded", + "description": "The error code identifying the type of error.", + "example": "group_membership_limit_exceeded", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Add a member to a Group", + "tags": [ + "groups" + ], + "x-feature-flag": "user-groups-enabled" + } + }, + "/organizations/{organizationId}/groups/{groupId}/organization-memberships/{omId}": { + "delete": { + "description": "Remove an organization membership from a group.", + "operationId": "GroupMembershipsController_removeMember", + "parameters": [ + { + "description": "Unique identifier of the Organization.", + "in": "path", + "name": "organizationId", + "required": true, + "schema": { + "example": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", + "type": "string" + } + }, + { + "description": "Unique identifier of the Group.", + "in": "path", + "name": "groupId", + "required": true, + "schema": { + "example": "group_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "description": "Unique identifier of the Organization Membership.", + "in": "path", + "name": "omId", + "required": true, + "schema": { + "example": "om_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Remove a member from a Group", + "tags": [ + "groups" + ], + "x-feature-flag": "user-groups-enabled" + } + }, + "/portal/generate_link": { + "post": { + "description": "Generate a Portal Link scoped to an Organization.", + "operationId": "PortalSessionsController_create", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GenerateLinkDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PortalLinkResponse" + } + } + }, + "description": "Created" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Generate a Portal Link", + "tags": [ + "admin-portal" + ] + } + }, + "/radar/attempts": { + "post": { + "description": "Assess a request for risk using the Radar engine and receive a verdict.", + "operationId": "RadarStandaloneController_assess", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "action": { + "description": "The action being performed.", + "enum": [ + "sign-up", + "sign-in" + ], + "example": "sign-in", + "type": "string" + }, + "auth_method": { + "description": "The authentication method being used.", + "enum": [ + "Password", + "Passkey", + "Authenticator", + "SMS_OTP", + "Email_OTP", + "Social", + "SSO", + "Other" + ], + "example": "Password", + "type": "string" + }, + "email": { + "description": "The email address of the user making the request.", + "example": "user@example.com", + "format": "email", + "type": "string" + }, + "ip_address": { + "description": "The IP address of the request to assess.", + "example": "49.78.240.97", + "type": "string" + }, + "user_agent": { + "description": "The user agent string of the request to assess.", + "example": "Mozilla/5.0", + "type": "string" + } + }, + "required": [ + "ip_address", + "user_agent", + "email", + "auth_method", + "action" + ], + "type": "object" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RadarStandaloneResponse" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Standalone radar is not enabled." + } + }, + "summary": "Create an attempt", + "tags": [ + "radar" + ] + } + }, + "/radar/attempts/{id}": { + "put": { + "description": "You may optionally inform Radar that an authentication attempt or challenge was successful using this endpoint. Some Radar controls depend on tracking recent successful attempts, such as impossible travel.", + "operationId": "RadarStandaloneController_updateRadarAttempt", + "parameters": [ + { + "description": "The unique identifier of the Radar attempt to update.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "radar_att_01HZBC6N1EB1ZY7KG32X", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "attempt_status": { + "const": "success", + "description": "Set to `\"success\"` to mark the authentication attempt as successful.", + "example": "success", + "type": "string" + }, + "challenge_status": { + "const": "success", + "description": "Set to `\"success\"` to mark the challenge as completed.", + "example": "success", + "type": "string" + } + }, + "type": "object" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "Radar attempt updated." + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Update a Radar attempt", + "tags": [ + "radar" + ] + } + }, + "/radar/lists/{type}/{action}": { + "delete": { + "description": "Remove an entry from a Radar list.", + "operationId": "RadarStandaloneController_deleteRadarListEntry", + "parameters": [ + { + "description": "The type of the Radar list (e.g. ip_address, domain, email).", + "in": "path", + "name": "type", + "required": true, + "schema": { + "enum": [ + "ip_address", + "domain", + "email", + "device", + "user_agent", + "device_fingerprint", + "country" + ], + "example": "ip_address", + "type": "string" + } + }, + { + "description": "The list action indicating whether to remove the entry from the allow or block list.", + "in": "path", + "name": "action", + "required": true, + "schema": { + "enum": [ + "block", + "allow" + ], + "example": "block", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "entry": { + "description": "The value to remove from the list. Must match an existing entry.", + "example": "198.51.100.42", + "type": "string" + } + }, + "required": [ + "entry" + ], + "type": "object" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "Radar list updated." + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Remove an entry from a Radar list", + "tags": [ + "radar" + ] + }, + "post": { + "description": "Add an entry to a Radar list.", + "operationId": "RadarStandaloneController_updateRadarList", + "parameters": [ + { + "description": "The type of the Radar list (e.g. ip_address, domain, email).", + "in": "path", + "name": "type", + "required": true, + "schema": { + "enum": [ + "ip_address", + "domain", + "email", + "device", + "user_agent", + "device_fingerprint", + "country" + ], + "example": "ip_address", + "type": "string" + } + }, + { + "description": "The list action indicating whether to add the entry to the allow or block list.", + "in": "path", + "name": "action", + "required": true, + "schema": { + "enum": [ + "block", + "allow" + ], + "example": "block", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "entry": { + "description": "The value to add to the list. Must match the format of the list type (e.g. a valid IP address for `ip_address`, a valid email for `email`).", + "example": "198.51.100.42", + "type": "string" + } + }, + "required": [ + "entry" + ], + "type": "object" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RadarListEntryAlreadyPresentResponse" + } + } + }, + "description": "Entry already present in the list." + }, + "201": { + "description": "Created" + }, + "204": { + "description": "Entry successfully added to the list." + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Add an entry to a Radar list", + "tags": [ + "radar" + ] + } + }, + "/sso/authorize": { + "get": { + "description": "Initiates the single sign-on flow.", + "operationId": "SsoController_authorize", + "parameters": [ + { + "description": "Additional scopes to request from the identity provider. Applicable when using OAuth or OpenID Connect connections.", + "explode": false, + "in": "query", + "name": "provider_scopes", + "required": false, + "schema": { + "example": [ + "openid", + "profile", + "email" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "style": "form" + }, + { + "description": "Key/value pairs of query parameters to pass to the OAuth provider. Only applicable when using OAuth connections.", + "in": "query", + "name": "provider_query_params", + "required": false, + "schema": { + "additionalProperties": { + "type": "string" + }, + "example": { + "access_type": "offline", + "hd": "example.com" + }, + "type": "object" + } + }, + { + "description": "The unique identifier of the WorkOS environment client.", + "in": "query", + "name": "client_id", + "required": true, + "schema": { + "example": "client_01HZBC6N1EB1ZY7KG32X", + "type": "string" + } + }, + { + "deprecated": true, + "description": "Deprecated. Use `connection` or `organization` instead. Used to initiate SSO for a connection by domain. The domain must be associated with a connection in your WorkOS environment.", + "in": "query", + "name": "domain", + "required": false, + "schema": { + "example": "example.com", + "type": "string" + } + }, + { + "description": "Used to initiate OAuth authentication with various providers.", + "in": "query", + "name": "provider", + "required": false, + "schema": { + "enum": [ + "AppleOAuth", + "BitbucketOAuth", + "GitHubOAuth", + "GitLabOAuth", + "GoogleOAuth", + "IntuitOAuth", + "LinkedInOAuth", + "MicrosoftOAuth", + "SalesforceOAuth", + "SlackOAuth", + "VercelMarketplaceOAuth", + "VercelOAuth", + "XeroOAuth" + ], + "example": "GoogleOAuth", + "type": "string" + } + }, + { + "description": "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.", + "in": "query", + "name": "redirect_uri", + "required": true, + "schema": { + "example": "https://example.com/callback", + "format": "uri", + "type": "string" + } + }, + { + "description": "The only valid option for the response type parameter is `\"code\"`.\n\nThe `\"code\"` parameter value initiates an [authorization code grant type](https://tools.ietf.org/html/rfc6749#section-4.1). This grant type allows you to exchange an authorization code for an access token during the redirect that takes place after a user has authenticated with an identity provider.", + "in": "query", + "name": "response_type", + "required": true, + "schema": { + "const": "code", + "example": "code", + "type": "string" + } + }, + { + "description": "An optional parameter that can be used to encode arbitrary information to help restore application state between redirects. If included, the redirect URI received from WorkOS will contain the exact `state` that was passed.", + "in": "query", + "name": "state", + "required": false, + "schema": { + "example": "dj1kUXc0dzlXZ1hjUQ==", + "type": "string" + } + }, + { + "description": "Used to initiate SSO for a connection. The value should be a WorkOS connection ID.\n\nYou can persist the WorkOS connection ID with application user or team identifiers. WorkOS will use the connection indicated by the connection parameter to direct the user to the corresponding IdP for authentication.", + "in": "query", + "name": "connection", + "required": false, + "schema": { + "example": "conn_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + { + "description": "Used to initiate SSO for an organization. The value should be a WorkOS organization ID.\n\nYou can persist the WorkOS organization ID with application user or team identifiers. WorkOS will use the organization ID to determine the appropriate connection and the IdP to direct the user to for authentication.", + "in": "query", + "name": "organization", + "required": false, + "schema": { + "example": "org_01EHQMYV6MBK39QC5PZXHY59C3", + "type": "string" + } + }, + { + "description": "Can be used to pre-fill the domain field when initiating authentication with Microsoft OAuth or with a Google SAML connection type.", + "in": "query", + "name": "domain_hint", + "required": false, + "schema": { + "example": "example.com", + "type": "string" + } + }, + { + "description": "Can be used to pre-fill the username/email address field of the IdP sign-in page for the user, if you know their username ahead of time. Currently supported for OAuth, OpenID Connect, Okta, Entra ID, and custom SAML connections.", + "in": "query", + "name": "login_hint", + "required": false, + "schema": { + "example": "user@example.com", + "type": "string" + } + }, + { + "description": "A random string generated by the client that is used to mitigate replay attacks.", + "in": "query", + "name": "nonce", + "required": false, + "schema": { + "example": "abc123def456", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SsoAuthorizeUrlResponse" + } + } + }, + "description": "OK" + }, + "302": { + "description": "", + "headers": { + "Location": { + "schema": { + "format": "uri", + "type": "string" + } + } + } + } + }, + "security": [], + "summary": "Initiate SSO", + "tags": [ + "sso" + ] + } + }, + "/sso/jwks/{clientId}": { + "get": { + "description": "Returns the JSON Web Key Set (JWKS) containing the public keys used for verifying access tokens.", + "operationId": "SsoController_jsonWebKeySet", + "parameters": [ + { + "description": "Identifies the application making the request to the WorkOS server. You can obtain your client ID from the [API Keys](https://dashboard.workos.com/api-keys) page in the dashboard.", + "in": "path", + "name": "clientId", + "required": true, + "schema": { + "example": "client_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JwksResponse" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "security": [], + "summary": "Get JWKS", + "tags": [ + "user-management.session-tokens" + ] + } + }, + "/sso/logout": { + "get": { + "description": "Logout allows to sign out a user from your application by triggering the identity provider sign out flow. This `GET` endpoint should be a redirection, since the identity provider user will be identified in the browser session.\n\nBefore redirecting to this endpoint, you need to generate a short-lived logout token using the [Logout Authorize](/reference/sso/logout/authorize) endpoint.", + "operationId": "SsoController_logout", + "parameters": [ + { + "description": "The logout token returned from the [Logout Authorize](/reference/sso/logout/authorize) endpoint.", + "in": "query", + "name": "token", + "required": true, + "schema": { + "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwcm9maWxlX2lkIjoicHJvZl8wMUdXUTFHMEgyRk02QVNFRjBIUzEzSENXOS0zMDRrZzAzZyIsImV4cCI6IjE1MTYyMzkwMjIifQ.Wru9Qlnf5DpohtGCKhZU4cVOd3zpiu7QQ-XEX--5A_4", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + }, + "302": { + "description": "", + "headers": { + "Location": { + "schema": { + "format": "uri", + "type": "string" + } + } + } + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "security": [], + "servers": [ + { + "url": "https://auth.workos.com" + } + ], + "summary": "Logout Redirect", + "tags": [ + "sso" + ] + } + }, + "/sso/logout/authorize": { + "post": { + "description": "You should call this endpoint from your server to generate a logout token which is required for the [Logout Redirect](/reference/sso/logout) endpoint.", + "operationId": "SsoController_logoutAuthorize", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "profile_id": { + "description": "The unique ID of the profile to log out.", + "example": "prof_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + "required": [ + "profile_id" + ], + "type": "object" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SsoLogoutAuthorizeResponse" + } + } + }, + "description": "OK" + }, + "201": { + "description": "Created" + }, + "400": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "error": { + "const": "connection_invalid", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "Single Logout is only supported for GenericOIDC connections.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "error": { + "const": "unauthorized_client", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "Unauthorized", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + } + ] + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "servers": [ + { + "url": "https://auth.workos.com" + } + ], + "summary": "Logout Authorize", + "tags": [ + "sso" + ] + } + }, + "/sso/profile": { + "get": { + "description": "Exchange an access token for a user's [Profile](/reference/sso/profile). Because this profile is returned in the [Get a Profile and Token endpoint](/reference/sso/profile/get-profile-and-token) your application usually does not need to call this endpoint. It is available for any authentication flows that require an additional endpoint to retrieve a user's profile.", + "operationId": "SsoController_getProfile", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Profile" + } + } + }, + "description": "OK" + }, + "401": { + "content": { + "application/json": { + "schema": { + "properties": { + "error": { + "const": "Unauthorized", + "type": "string" + } + }, + "required": [ + "error" + ], + "type": "object" + } + } + }, + "description": "Unauthorized" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "security": [ + { + "access_token": [] + } + ], + "summary": "Get a User Profile", + "tags": [ + "sso" + ] + } + }, + "/sso/token": { + "post": { + "description": "Get an access token along with the user [Profile](/reference/sso/profile) using the code passed to your [Redirect URI](/reference/sso/get-authorization-url/redirect-uri).", + "operationId": "SsoController_token", + "parameters": [ + { + "description": "The client ID of the WorkOS environment.", + "in": "query", + "name": "client_id", + "required": true, + "schema": { + "example": "client_01HZBC6N1EB1ZY7KG32X", + "type": "string" + } + }, + { + "description": "The client secret of the WorkOS environment.", + "in": "query", + "name": "client_secret", + "required": true, + "schema": { + "example": "sk_example_123456789", + "type": "string" + } + }, + { + "description": "The authorization code received from the authorization callback.", + "in": "query", + "name": "code", + "required": true, + "schema": { + "example": "authorization_code_value", + "type": "string" + } + }, + { + "description": "The grant type for the token request.", + "in": "query", + "name": "grant_type", + "required": true, + "schema": { + "const": "authorization_code", + "example": "authorization_code", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TokenQueryDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SsoTokenResponse" + } + } + }, + "description": "OK" + }, + "201": { + "description": "Created" + }, + "400": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "error": { + "const": "invalid_client", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "Invalid client ID or secret.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "error": { + "const": "unauthorized_client", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The client is not authorized to use this grant type.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "error": { + "const": "invalid_grant", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The code has expired or has already been used.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "error": { + "const": "unsupported_grant_type", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The grant type is not supported.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + } + ] + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "security": [], + "summary": "Get a Profile and Token", + "tags": [ + "sso" + ] + } + }, + "/user_management/authenticate": { + "post": { + "description": "Authenticate a user with a specified [authentication method](/reference/authkit/authentication).", + "operationId": "UserlandSessionsController_authenticate[0]", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "client_id": { + "description": "The client ID of the application.", + "example": "client_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "client_secret": { + "description": "The client secret of the application. May be omitted by public clients that authenticate through other means, such as a PKCE `code_verifier`.", + "example": "sk_test_....", + "type": "string" + }, + "code": { + "description": "The authorization code received from the redirect.", + "example": "vBqZKaPpsnJlPfXiDqN7b6VTz", + "type": "string" + }, + "code_verifier": { + "description": "The PKCE code verifier used to derive the code challenge passed to the authorization URL.", + "example": "dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk", + "type": "string" + }, + "device_id": { + "description": "A unique identifier for the device.", + "example": "device_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "grant_type": { + "const": "authorization_code", + "type": "string" + }, + "invitation_token": { + "description": "An invitation token to accept during authentication.", + "example": "inv_tok_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "ip_address": { + "description": "The IP address of the user's request.", + "example": "203.0.113.42", + "type": "string" + }, + "user_agent": { + "description": "The user agent string from the user's browser.", + "example": "Mozilla/5.0", + "type": "string" + } + }, + "required": [ + "client_id", + "grant_type", + "code" + ], + "type": "object" + }, + { + "properties": { + "client_id": { + "description": "The client ID of the application.", + "example": "client_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "client_secret": { + "description": "The client secret of the application.", + "example": "sk_test_....", + "type": "string" + }, + "device_id": { + "description": "A unique identifier for the device.", + "example": "device_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "email": { + "description": "The user's email address.", + "example": "user@example.com", + "type": "string" + }, + "grant_type": { + "const": "password", + "type": "string" + }, + "invitation_token": { + "description": "An invitation token to accept during authentication.", + "example": "inv_tok_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "ip_address": { + "description": "The IP address of the user's request.", + "example": "203.0.113.42", + "type": "string" + }, + "password": { + "description": "The user's password.", + "example": "strong_password_123!", + "type": "string" + }, + "user_agent": { + "description": "The user agent string from the user's browser.", + "example": "Mozilla/5.0", + "type": "string" + } + }, + "required": [ + "client_id", + "client_secret", + "grant_type", + "email", + "password" + ], + "type": "object" + }, + { + "properties": { + "client_id": { + "description": "The client ID of the application.", + "example": "client_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "client_secret": { + "description": "The client secret of the application. May be omitted by public clients that authenticate through other means, such as a PKCE `code_verifier`.", + "example": "sk_test_....", + "type": "string" + }, + "device_id": { + "description": "A unique identifier for the device.", + "example": "device_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "grant_type": { + "const": "refresh_token", + "type": "string" + }, + "ip_address": { + "description": "The IP address of the user's request.", + "example": "203.0.113.42", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization to scope the session to.", + "example": "org_01EHQMYV6MBK39QC5PZXHY59C3", + "type": "string" + }, + "refresh_token": { + "description": "The refresh token to exchange for new tokens.", + "example": "yAjhKk23hJMM3DaR...", + "type": "string" + }, + "user_agent": { + "description": "The user agent string from the user's browser.", + "example": "Mozilla/5.0", + "type": "string" + } + }, + "required": [ + "client_id", + "grant_type", + "refresh_token" + ], + "type": "object" + }, + { + "properties": { + "client_id": { + "description": "The client ID of the application.", + "example": "client_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "client_secret": { + "description": "The client secret of the application.", + "example": "sk_test_....", + "type": "string" + }, + "code": { + "description": "The one-time code for Magic Auth authentication.", + "example": "123456", + "type": "string" + }, + "device_id": { + "description": "A unique identifier for the device.", + "example": "device_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "email": { + "description": "The user's email address.", + "example": "user@example.com", + "type": "string" + }, + "grant_type": { + "const": "urn:workos:oauth:grant-type:magic-auth:code", + "type": "string" + }, + "invitation_token": { + "description": "An invitation token to accept during authentication.", + "example": "inv_tok_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "ip_address": { + "description": "The IP address of the user's request.", + "example": "203.0.113.42", + "type": "string" + }, + "user_agent": { + "description": "The user agent string from the user's browser.", + "example": "Mozilla/5.0", + "type": "string" + } + }, + "required": [ + "client_id", + "client_secret", + "grant_type", + "code", + "email" + ], + "type": "object" + }, + { + "properties": { + "client_id": { + "description": "The client ID of the application.", + "example": "client_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "client_secret": { + "description": "The client secret of the application.", + "example": "sk_test_....", + "type": "string" + }, + "code": { + "description": "The email verification code.", + "example": "123456", + "type": "string" + }, + "device_id": { + "description": "A unique identifier for the device.", + "example": "device_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "grant_type": { + "const": "urn:workos:oauth:grant-type:email-verification:code", + "type": "string" + }, + "ip_address": { + "description": "The IP address of the user's request.", + "example": "203.0.113.42", + "type": "string" + }, + "pending_authentication_token": { + "description": "The pending authentication token from a previous authentication attempt.", + "example": "cTDQJTTkTkkVYxbn...", + "type": "string" + }, + "user_agent": { + "description": "The user agent string from the user's browser.", + "example": "Mozilla/5.0", + "type": "string" + } + }, + "required": [ + "client_id", + "client_secret", + "grant_type", + "code", + "pending_authentication_token" + ], + "type": "object" + }, + { + "properties": { + "authentication_challenge_id": { + "description": "The ID of the MFA authentication challenge.", + "example": "auth_challenge_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "client_id": { + "description": "The client ID of the application.", + "example": "client_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "client_secret": { + "description": "The client secret of the application.", + "example": "sk_test_....", + "type": "string" + }, + "code": { + "description": "The TOTP code from the authenticator app.", + "example": "123456", + "type": "string" + }, + "device_id": { + "description": "A unique identifier for the device.", + "example": "device_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "grant_type": { + "const": "urn:workos:oauth:grant-type:mfa-totp", + "type": "string" + }, + "ip_address": { + "description": "The IP address of the user's request.", + "example": "203.0.113.42", + "type": "string" + }, + "pending_authentication_token": { + "description": "The pending authentication token from a previous authentication attempt.", + "example": "cTDQJTTkTkkVYxbn...", + "type": "string" + }, + "user_agent": { + "description": "The user agent string from the user's browser.", + "example": "Mozilla/5.0", + "type": "string" + } + }, + "required": [ + "client_id", + "client_secret", + "grant_type", + "code", + "pending_authentication_token", + "authentication_challenge_id" + ], + "type": "object" + }, + { + "properties": { + "client_id": { + "description": "The client ID of the application.", + "example": "client_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "client_secret": { + "description": "The client secret of the application.", + "example": "sk_test_....", + "type": "string" + }, + "device_id": { + "description": "A unique identifier for the device.", + "example": "device_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "grant_type": { + "const": "urn:workos:oauth:grant-type:organization-selection", + "type": "string" + }, + "ip_address": { + "description": "The IP address of the user's request.", + "example": "203.0.113.42", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization the user selected.", + "example": "org_01EHQMYV6MBK39QC5PZXHY59C3", + "type": "string" + }, + "pending_authentication_token": { + "description": "The pending authentication token from a previous authentication attempt.", + "example": "cTDQJTTkTkkVYxbn...", + "type": "string" + }, + "user_agent": { + "description": "The user agent string from the user's browser.", + "example": "Mozilla/5.0", + "type": "string" + } + }, + "required": [ + "client_id", + "client_secret", + "grant_type", + "pending_authentication_token", + "organization_id" + ], + "type": "object" + }, + { + "properties": { + "client_id": { + "description": "The client ID of the application.", + "example": "client_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "device_code": { + "description": "The device verification code.", + "example": "Ao4fMrDS...", + "type": "string" + }, + "device_id": { + "description": "A unique identifier for the device.", + "example": "device_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "grant_type": { + "const": "urn:ietf:params:oauth:grant-type:device_code", + "type": "string" + }, + "ip_address": { + "description": "The IP address of the user's request.", + "example": "203.0.113.42", + "type": "string" + }, + "user_agent": { + "description": "The user agent string from the user's browser.", + "example": "Mozilla/5.0", + "type": "string" + } + }, + "required": [ + "client_id", + "grant_type", + "device_code" + ], + "type": "object" + } + ] + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserlandAuthenticateResponse" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "code": { + "const": "invalid_organization_id", + "description": "The error code identifying the type of error.", + "example": "invalid_organization_id", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "code_challenge_not_found", + "description": "The error code identifying the type of error.", + "example": "code_challenge_not_found", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "invalid_credentials", + "description": "The error code identifying the type of error.", + "example": "invalid_credentials", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "invalid_one_time_code", + "description": "The error code identifying the type of error.", + "example": "invalid_one_time_code", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "one_time_code_previously_used", + "description": "The error code identifying the type of error.", + "example": "one_time_code_previously_used", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "one_time_code_expired", + "description": "The error code identifying the type of error.", + "example": "one_time_code_expired", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "one_time_code_too_many_attempts", + "description": "The error code identifying the type of error.", + "example": "one_time_code_too_many_attempts", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "invalid_pending_authentication_token", + "description": "The error code identifying the type of error.", + "example": "invalid_pending_authentication_token", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "user_mismatch", + "description": "The error code identifying the type of error.", + "example": "user_mismatch", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "error": { + "const": "invalid_client", + "description": "The OAuth error code.", + "example": "invalid_client", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The request failed due to: invalid_client.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "error": { + "const": "unauthorized_client", + "description": "The OAuth error code.", + "example": "unauthorized_client", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The request failed due to: unauthorized_client.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "error": { + "const": "invalid_profile", + "description": "The OAuth error code.", + "example": "invalid_profile", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The request failed due to: invalid_profile.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "error": { + "const": "invitation_invalid", + "description": "The OAuth error code.", + "example": "invitation_invalid", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The request failed due to: invitation_invalid.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "error": { + "const": "invitation_cannot_be_used_for_email", + "description": "The OAuth error code.", + "example": "invitation_cannot_be_used_for_email", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The request failed due to: invitation_cannot_be_used_for_email.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "error": { + "const": "authentication_method_not_allowed", + "description": "The OAuth error code.", + "example": "authentication_method_not_allowed", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The request failed due to: authentication_method_not_allowed.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "error": { + "const": "invalid_connection", + "description": "The OAuth error code.", + "example": "invalid_connection", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The request failed due to: invalid_connection.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "error": { + "const": "sign_up_not_allowed", + "description": "The OAuth error code.", + "example": "sign_up_not_allowed", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The request failed due to: sign_up_not_allowed.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "error": { + "const": "organization_authentication_methods_required", + "description": "The OAuth error code.", + "example": "organization_authentication_methods_required", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The request failed due to: organization_authentication_methods_required.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "error": { + "const": "invalid_link_authorization_code", + "description": "The OAuth error code.", + "example": "invalid_link_authorization_code", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The request failed due to: invalid_link_authorization_code.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "error": { + "const": "extra_attributes_required", + "description": "The OAuth error code.", + "example": "extra_attributes_required", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The request failed due to: extra_attributes_required.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "error": { + "const": "pkce_not_supported", + "description": "The OAuth error code.", + "example": "pkce_not_supported", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The request failed due to: pkce_not_supported.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "error": { + "const": "expired_token", + "description": "The OAuth error code.", + "example": "expired_token", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The request failed due to: expired_token.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "error": { + "const": "authorization_pending", + "description": "The OAuth error code.", + "example": "authorization_pending", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The request failed due to: authorization_pending.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "error": { + "const": "access_denied", + "description": "The OAuth error code.", + "example": "access_denied", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The request failed due to: access_denied.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "error": { + "const": "slow_down", + "description": "The OAuth error code.", + "example": "slow_down", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The request failed due to: slow_down.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "message": { + "const": "Must use SSO for selected organization", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + }, + { + "oneOf": [ + { + "properties": { + "error": { + "const": "invalid_grant", + "description": "The OAuth error code.", + "example": "invalid_grant", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The request failed due to: invalid_grant.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "error": { + "const": "invalid_request", + "description": "The OAuth error code.", + "example": "invalid_request", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The request failed due to: invalid_request.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "error": { + "const": "organization_not_found", + "description": "The OAuth error code.", + "example": "organization_not_found", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The request failed due to: organization_not_found.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "error": { + "const": "organization_membership_not_found", + "description": "The OAuth error code.", + "example": "organization_membership_not_found", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The request failed due to: organization_membership_not_found.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "error": { + "const": "mfa_enrollment", + "description": "The OAuth error code.", + "example": "mfa_enrollment", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The request failed due to: mfa_enrollment.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "error": { + "const": "token_too_big", + "description": "The OAuth error code.", + "example": "token_too_big", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The request failed due to: token_too_big.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "allOf": [ + { + "properties": { + "error": { + "const": "sso_required", + "description": "The OAuth error code.", + "example": "sso_required", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The request failed due to: sso_required.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "connection_ids": { + "description": "The IDs of the SSO connections the user must authenticate through.", + "items": { + "example": "conn_01FVYZ...", + "type": "string" + }, + "type": "array" + }, + "email": { + "description": "The email address of the user that must authenticate via SSO.", + "example": "user@example.com", + "type": "string" + }, + "pending_authentication_token": { + "description": "A token that links the subsequent SSO authentication back to the pending authentication so the authorization session can be completed.", + "example": "pat_01FVYZ...", + "type": "string" + } + }, + "required": [ + "connection_ids", + "email" + ], + "type": "object" + } + ] + } + ] + } + ] + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "code": { + "const": "mfa_enrollment", + "description": "The error code identifying the type of error.", + "example": "mfa_enrollment", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "mfa_challenge", + "description": "The error code identifying the type of error.", + "example": "mfa_challenge", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "authentication_method_not_allowed", + "description": "The error code identifying the type of error.", + "example": "authentication_method_not_allowed", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "email_verification_required", + "description": "The error code identifying the type of error.", + "example": "email_verification_required", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "email_password_auth_disabled", + "description": "The error code identifying the type of error.", + "example": "email_password_auth_disabled", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "organization_selection_required", + "description": "The error code identifying the type of error.", + "example": "organization_selection_required", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "passkey_progressive_enrollment", + "description": "The error code identifying the type of error.", + "example": "passkey_progressive_enrollment", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "radar_challenge", + "description": "The error code identifying the type of error.", + "example": "radar_challenge", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "radar_sign_up_challenge", + "description": "The error code identifying the type of error.", + "example": "radar_sign_up_challenge", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "application_consent_required", + "description": "The error code identifying the type of error.", + "example": "application_consent_required", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + ] + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "invalid_request_parameters", + "description": "The error code identifying the type of error.", + "example": "invalid_request_parameters", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + }, + "429": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "daily_quota_exceeded", + "description": "The error code identifying the type of error.", + "example": "daily_quota_exceeded", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "" + } + }, + "summary": "Authenticate", + "tags": [ + "user-management.authentication" + ] + } + }, + "/user_management/authorize": { + "get": { + "description": "Generates an OAuth 2.0 authorization URL to authenticate a user with AuthKit or SSO.", + "operationId": "UserlandSsoController_authorize", + "parameters": [ + { + "description": "The only valid PKCE code challenge method is `\"S256\"`. Required when specifying a `code_challenge`.", + "in": "query", + "name": "code_challenge_method", + "required": false, + "schema": { + "const": "S256", + "example": "S256", + "type": "string" + } + }, + { + "description": "Code challenge derived from the code verifier used for the PKCE flow.", + "in": "query", + "name": "code_challenge", + "required": false, + "schema": { + "example": "E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM", + "type": "string" + } + }, + { + "description": "A domain hint for SSO connection lookup.", + "in": "query", + "name": "domain_hint", + "required": false, + "schema": { + "example": "example.com", + "type": "string" + } + }, + { + "description": "The ID of an SSO connection to use for authentication.", + "in": "query", + "name": "connection_id", + "required": false, + "schema": { + "example": "conn_01EHQMYV6MBK39QC5PZXHY59C3", + "type": "string" + } + }, + { + "description": "Key/value pairs of query parameters to pass to the OAuth provider.", + "in": "query", + "name": "provider_query_params", + "required": false, + "schema": { + "additionalProperties": { + "type": "string" + }, + "example": { + "access_type": "offline", + "hd": "example.com" + }, + "type": "object" + } + }, + { + "description": "Additional OAuth scopes to request from the identity provider.", + "explode": false, + "in": "query", + "name": "provider_scopes", + "required": false, + "schema": { + "example": [ + "openid", + "profile", + "email" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "style": "form" + }, + { + "description": "A token representing a user invitation to redeem during authentication.", + "in": "query", + "name": "invitation_token", + "required": false, + "schema": { + "example": "inv_token_abc123", + "type": "string" + } + }, + { + "description": "Used to specify which screen to display when the provider is `authkit`.", + "in": "query", + "name": "screen_hint", + "required": false, + "schema": { + "default": "sign-in", + "enum": [ + "sign-up", + "sign-in" + ], + "example": "sign-in", + "type": "string" + } + }, + { + "description": "A hint to the authorization server about the login identifier the user might use.", + "in": "query", + "name": "login_hint", + "required": false, + "schema": { + "example": "user@example.com", + "type": "string" + } + }, + { + "description": "The OAuth provider to authenticate with (e.g., GoogleOAuth, MicrosoftOAuth, GitHubOAuth).", + "in": "query", + "name": "provider", + "required": false, + "schema": { + "enum": [ + "authkit", + "AppleOAuth", + "BitbucketOAuth", + "GitHubOAuth", + "GitLabOAuth", + "GoogleOAuth", + "IntuitOAuth", + "LinkedInOAuth", + "MicrosoftOAuth", + "SalesforceOAuth", + "SlackOAuth", + "VercelMarketplaceOAuth", + "VercelOAuth", + "XeroOAuth" + ], + "example": "GoogleOAuth", + "type": "string" + } + }, + { + "description": "Controls the authentication flow behavior for the user.", + "in": "query", + "name": "prompt", + "required": false, + "schema": { + "example": "login", + "type": "string" + } + }, + { + "description": "An opaque value used to maintain state between the request and the callback.", + "in": "query", + "name": "state", + "required": false, + "schema": { + "example": "eyJyZXR1cm5UbyI6ICIvZGFzaGJvYXJkIn0=", + "type": "string" + } + }, + { + "description": "The ID of the organization to authenticate the user against.", + "in": "query", + "name": "organization_id", + "required": false, + "schema": { + "example": "org_01EHQMYV6MBK39QC5PZXHY59C3", + "type": "string" + } + }, + { + "description": "The response type of the application.", + "in": "query", + "name": "response_type", + "required": true, + "schema": { + "const": "code", + "example": "code", + "type": "string" + } + }, + { + "description": "The callback URI where the authorization code will be sent after authentication.", + "in": "query", + "name": "redirect_uri", + "required": true, + "schema": { + "example": "https://example.com/callback", + "format": "uri", + "type": "string" + } + }, + { + "description": "The unique identifier of the WorkOS environment client.", + "in": "query", + "name": "client_id", + "required": true, + "schema": { + "example": "client_01HZBC6N1EB1ZY7KG32X", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "location": { + "schema": { + "format": "uri", + "type": "string" + } + } + } + }, + "302": { + "description": "", + "headers": { + "location": { + "schema": { + "format": "uri", + "type": "string" + } + } + } + } + }, + "security": [], + "summary": "Get an authorization URL", + "tags": [ + "user-management.authentication" + ] + } + }, + "/user_management/authorize/device": { + "post": { + "description": "Initiates the CLI Auth flow by requesting a device code and verification URLs. This endpoint implements the OAuth 2.0 Device Authorization Flow ([RFC 8628](https://datatracker.ietf.org/doc/html/rfc8628)) and is designed for command-line applications or other devices with limited input capabilities.", + "operationId": "UserlandSsoController_deviceAuthorization", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "client_id": { + "description": "The WorkOS client ID for your application.", + "example": "client_01HZBC6N1EB1ZY7KG32X", + "type": "string" + } + }, + "required": [ + "client_id" + ], + "type": "object" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeviceAuthorizationResponse" + } + } + }, + "description": "Device authorization response with codes and verification URI." + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "error": { + "description": "Error code.", + "example": "invalid_client", + "type": "string" + }, + "error_description": { + "description": "Human-readable error description.", + "example": "Unknown client", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + } + } + }, + "description": "Invalid request parameters." + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "error": { + "description": "Error code.", + "example": "access_denied", + "type": "string" + }, + "error_description": { + "description": "Human-readable error description.", + "example": "Device authorization grant is not enabled for this team", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + } + } + }, + "description": "Feature not enabled for team." + } + }, + "security": [], + "summary": "Get device authorization URL", + "tags": [ + "user-management.authentication" + ] + } + }, + "/user_management/cors_origins": { + "post": { + "description": "Creates a new CORS origin for the current environment. CORS origins allow browser-based applications to make requests to the WorkOS API.", + "operationId": "CorsOriginsController_createCorsOrigin", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCorsOriginDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CorsOriginResponse" + } + } + }, + "description": "CORS origin created successfully." + }, + "409": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "description": "The error code.", + "example": "duplicate_cors_origin", + "type": "string" + }, + "message": { + "description": "A human-readable error message.", + "example": "CORS origin already exists.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Duplicate CORS origin." + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "errors": { + "description": "The list of validation errors.", + "items": { + "properties": { + "constraints": { + "type": "object" + }, + "property": { + "description": "The property that failed validation.", + "example": "origin", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "message": { + "description": "A human-readable error message.", + "example": "Validation failed.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Validation error." + } + }, + "summary": "Create a CORS origin", + "tags": [ + "user-management.cors-origins" + ] + } + }, + "/user_management/email_verification/{id}": { + "get": { + "description": "Get the details of an existing email verification code that can be used to send an email to a user for verification.", + "operationId": "UserlandUsersController_getEmailVerification", + "parameters": [ + { + "description": "The ID of the email verification code.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "email_verification_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmailVerification" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get an email verification code", + "tags": [ + "user-management.users" + ] + } + }, + "/user_management/invitations": { + "get": { + "description": "Get a list of all of invitations matching the criteria specified.", + "operationId": "UserlandUserInvitesController_list", + "parameters": [ + { + "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\"`.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "xxx_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "xxx_01HXYZ987654321KJIHGFEDCBA", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "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).", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + }, + { + "description": "The ID of the [organization](/reference/organization) that the recipient will join.", + "in": "query", + "name": "organization_id", + "required": false, + "schema": { + "example": "org_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + { + "description": "The email address of the recipient.", + "in": "query", + "name": "email", + "required": false, + "schema": { + "example": "marcelina.davis@example.com", + "format": "email", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserlandUserInviteList" + } + } + }, + "description": "OK" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "invalid_request_parameters", + "description": "The error code identifying the type of error.", + "example": "invalid_request_parameters", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "List invitations", + "tags": [ + "user-management.invitations" + ] + }, + "post": { + "description": "Sends an invitation email to the recipient.", + "operationId": "UserlandUserInvitesController_create", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateUserlandUserInviteOptionsDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserlandUserInvite" + } + } + }, + "description": "Created" + }, + "400": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "code": { + "const": "email_already_invited_to_organization", + "description": "The error code identifying the type of error.", + "example": "email_already_invited_to_organization", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "user_already_organization_member", + "description": "The error code identifying the type of error.", + "example": "user_already_organization_member", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "email_already_invited", + "description": "The error code identifying the type of error.", + "example": "email_already_invited", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "user_already_exists", + "description": "The error code identifying the type of error.", + "example": "user_already_exists", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "expires_in_days_too_short", + "description": "The error code identifying the type of error.", + "example": "expires_in_days_too_short", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "expires_in_days_too_long", + "description": "The error code identifying the type of error.", + "example": "expires_in_days_too_long", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "invalid_role", + "description": "The error code identifying the type of error.", + "example": "invalid_role", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + ] + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "invalid_request_parameters", + "description": "The error code identifying the type of error.", + "example": "invalid_request_parameters", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Send an invitation", + "tags": [ + "user-management.invitations" + ], + "x-sends-email": true + } + }, + "/user_management/invitations/by_token/{token}": { + "get": { + "description": "Retrieve an existing invitation using the token.", + "operationId": "UserlandUserInvitesController_getByToken", + "parameters": [ + { + "description": "The token used to accept the invitation.", + "in": "path", + "name": "token", + "required": true, + "schema": { + "example": "Z1uX3RbwcIl5fIGJJJCXXisdI", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserlandUserInvite" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Find an invitation by token", + "tags": [ + "user-management.invitations" + ] + } + }, + "/user_management/invitations/{id}": { + "get": { + "description": "Get the details of an existing invitation.", + "operationId": "UserlandUserInvitesController_get", + "parameters": [ + { + "description": "The unique ID of the invitation.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "invitation_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserlandUserInvite" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get an invitation", + "tags": [ + "user-management.invitations" + ] + } + }, + "/user_management/invitations/{id}/accept": { + "post": { + "description": "Accepts an invitation and, if linked to an organization, activates the user's membership in that organization.", + "operationId": "UserlandUserInvitesController_accept", + "parameters": [ + { + "description": "The unique ID of the invitation.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "invitation_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "accept_invitation_url": { + "description": "The URL where the recipient can accept the invitation.", + "example": "https://your-app.com/invite?invitation_token=Z1uX3RbwcIl5fIGJJJCXXisdI", + "type": "string" + }, + "accepted_at": { + "description": "The timestamp when the invitation was accepted, or null if not yet accepted.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "accepted_user_id": { + "description": "The ID of the user who accepted the invitation, once accepted.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": [ + "string", + "null" + ] + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "email": { + "description": "The email address of the recipient.", + "example": "marcelina.davis@example.com", + "type": "string" + }, + "expires_at": { + "description": "The timestamp when the invitation expires.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "The unique ID of the invitation.", + "example": "invitation_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + }, + "inviter_user_id": { + "description": "The ID of the user who invited the recipient, if provided.", + "example": "user_01HYGBX8ZGD19949T3BM4FW1C3", + "type": [ + "string", + "null" + ] + }, + "object": { + "const": "invitation", + "description": "Distinguishes the invitation object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the [organization](/reference/organization) that the recipient will join.", + "example": "org_01E4ZCR3C56J083X43JQXF3JK5", + "type": [ + "string", + "null" + ] + }, + "revoked_at": { + "description": "The timestamp when the invitation was revoked, or null if not revoked.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "role_slug": { + "description": "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.", + "example": "admin", + "type": [ + "string", + "null" + ] + }, + "state": { + "description": "The state of the invitation.", + "enum": [ + "pending", + "accepted", + "expired", + "revoked" + ], + "example": "accepted", + "type": "string" + }, + "token": { + "description": "The token used to accept the invitation.", + "example": "Z1uX3RbwcIl5fIGJJJCXXisdI", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "email", + "state", + "accepted_at", + "revoked_at", + "expires_at", + "organization_id", + "inviter_user_id", + "accepted_user_id", + "role_slug", + "created_at", + "updated_at", + "token", + "accept_invitation_url" + ], + "type": "object", + "x-inline-with-overrides": true + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "enum": [ + "invite_not_pending", + "invalid_invite", + "invite_has_accepted_user_id" + ], + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Invite is not pending.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Accept an invitation", + "tags": [ + "user-management.invitations" + ] + } + }, + "/user_management/invitations/{id}/resend": { + "post": { + "description": "Resends an invitation email to the recipient. The invitation must be in a pending state.", + "operationId": "UserlandUserInvitesController_resend", + "parameters": [ + { + "description": "The unique ID of the invitation.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "invitation_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResendUserlandUserInviteOptionsDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserlandUserInvite" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "code": { + "const": "invite_expired", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Invite has expired.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "invite_revoked", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Invite has been revoked.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "invite_accepted", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Invite has already been accepted.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + ] + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "invalid_request_parameters", + "description": "The error code identifying the type of error.", + "example": "invalid_request_parameters", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Resend an invitation", + "tags": [ + "user-management.invitations" + ], + "x-sends-email": true + } + }, + "/user_management/invitations/{id}/revoke": { + "post": { + "description": "Revokes an existing invitation.", + "operationId": "UserlandUserInvitesController_revoke", + "parameters": [ + { + "description": "The unique ID of the invitation.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "invitation_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "accept_invitation_url": { + "description": "The URL where the recipient can accept the invitation.", + "example": "https://your-app.com/invite?invitation_token=Z1uX3RbwcIl5fIGJJJCXXisdI", + "type": "string" + }, + "accepted_at": { + "description": "The timestamp when the invitation was accepted, or null if not yet accepted.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "accepted_user_id": { + "description": "The ID of the user who accepted the invitation, once accepted.", + "example": null, + "type": [ + "string", + "null" + ] + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "email": { + "description": "The email address of the recipient.", + "example": "marcelina.davis@example.com", + "type": "string" + }, + "expires_at": { + "description": "The timestamp when the invitation expires.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "The unique ID of the invitation.", + "example": "invitation_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + }, + "inviter_user_id": { + "description": "The ID of the user who invited the recipient, if provided.", + "example": "user_01HYGBX8ZGD19949T3BM4FW1C3", + "type": [ + "string", + "null" + ] + }, + "object": { + "const": "invitation", + "description": "Distinguishes the invitation object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the [organization](/reference/organization) that the recipient will join.", + "example": "org_01E4ZCR3C56J083X43JQXF3JK5", + "type": [ + "string", + "null" + ] + }, + "revoked_at": { + "description": "The timestamp when the invitation was revoked, or null if not revoked.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "role_slug": { + "description": "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.", + "example": "admin", + "type": [ + "string", + "null" + ] + }, + "state": { + "description": "The state of the invitation.", + "enum": [ + "pending", + "accepted", + "expired", + "revoked" + ], + "example": "revoked", + "type": "string" + }, + "token": { + "description": "The token used to accept the invitation.", + "example": "Z1uX3RbwcIl5fIGJJJCXXisdI", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "email", + "state", + "accepted_at", + "revoked_at", + "expires_at", + "organization_id", + "inviter_user_id", + "accepted_user_id", + "role_slug", + "created_at", + "updated_at", + "token", + "accept_invitation_url" + ], + "type": "object", + "x-inline-with-overrides": true + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "invite_not_pending", + "description": "The error code identifying the type of error.", + "example": "invite_not_pending", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Invite is not pending.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Revoke an invitation", + "tags": [ + "user-management.invitations" + ] + } + }, + "/user_management/jwt_template": { + "get": { + "description": "Get the JWT template for the current environment.", + "operationId": "JwtTemplatesController_getJwtTemplate", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JwtTemplate" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get JWT template", + "tags": [ + "user-management.jwt-template" + ] + }, + "put": { + "description": "Update the JWT template for the current environment.", + "operationId": "JwtTemplatesController_updateJwtTemplate", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateJwtTemplateDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/JwtTemplate" + } + } + }, + "description": "OK" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "invalid_request_parameters", + "description": "The error code identifying the type of error.", + "example": "invalid_request_parameters", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Update JWT template", + "tags": [ + "user-management.jwt-template" + ] + } + }, + "/user_management/magic_auth": { + "post": { + "description": "Creates a one-time authentication code that can be sent to the user's email address. The code expires in 10 minutes. To verify the code, [authenticate the user with Magic Auth](/reference/authkit/authentication/magic-auth).", + "operationId": "UserlandMagicAuthController_sendMagicAuthCodeAndReturn", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateUserlandMagicCodeAndReturnDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MagicAuth" + } + } + }, + "description": "Created" + }, + "400": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "error": { + "const": "invitation_invalid", + "description": "The OAuth error code.", + "example": "invitation_invalid", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The request failed due to: invitation_invalid.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "error": { + "const": "authentication_method_not_allowed", + "description": "The OAuth error code.", + "example": "authentication_method_not_allowed", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The request failed due to: authentication_method_not_allowed.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + }, + { + "properties": { + "error": { + "const": "sign_up_not_allowed", + "description": "The OAuth error code.", + "example": "sign_up_not_allowed", + "type": "string" + }, + "error_description": { + "description": "A human-readable description of the error.", + "example": "The request failed due to: sign_up_not_allowed.", + "type": "string" + } + }, + "required": [ + "error", + "error_description" + ], + "type": "object" + } + ] + } + } + }, + "description": "Bad Request" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + }, + "429": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "daily_quota_exceeded", + "description": "The error code identifying the type of error.", + "example": "daily_quota_exceeded", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "" + } + }, + "summary": "Create a Magic Auth code", + "tags": [ + "user-management.magic-auth" + ], + "x-sends-email": true + } + }, + "/user_management/magic_auth/{id}": { + "get": { + "description": "Get the details of an existing [Magic Auth](/reference/authkit/magic-auth) code that can be used to send an email to a user for authentication.", + "operationId": "UserlandMagicAuthController_get", + "parameters": [ + { + "description": "The unique ID of the Magic Auth code.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "magic_auth_01HWZBQZY2M3AMQW166Q22K88F", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MagicAuth" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get Magic Auth code details", + "tags": [ + "user-management.magic-auth" + ] + } + }, + "/user_management/organization_memberships": { + "get": { + "description": "Get a list of all organization memberships matching the criteria specified. At least one of `user_id` or `organization_id` must be provided. By default only active memberships are returned. Use the `statuses` parameter to filter by other statuses.", + "operationId": "UserlandUserOrganizationMembershipsController_list", + "parameters": [ + { + "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\"`.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "xxx_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "xxx_01HXYZ987654321KJIHGFEDCBA", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "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).", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + }, + { + "description": "The ID of the [organization](/reference/organization) which the user belongs to.", + "in": "query", + "name": "organization_id", + "required": false, + "schema": { + "example": "org_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + { + "description": "Filter by the status of the organization membership. Array including any of `active`, `inactive`, or `pending`.", + "explode": false, + "in": "query", + "name": "statuses", + "required": false, + "schema": { + "example": [ + "active" + ], + "items": { + "enum": [ + "active", + "inactive", + "pending" + ], + "type": "string" + }, + "type": "array" + }, + "style": "form" + }, + { + "description": "The ID of the [user](/reference/authkit/user).", + "in": "query", + "name": "user_id", + "required": false, + "schema": { + "example": "user_01E4ZCR3C5A4QZ2Z2JQXGKZJ9E", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserlandUserOrganizationMembershipList" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "code": { + "const": "invalid_request_parameters", + "description": "The error code identifying the type of error.", + "example": "invalid_request_parameters", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "missing_user_id_or_organization_id", + "description": "The error code identifying the type of error.", + "example": "missing_user_id_or_organization_id", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + ] + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "List organization memberships", + "tags": [ + "user-management.organization-membership" + ] + }, + "post": { + "description": "Creates a new `active` organization membership for the given organization and user.\n\nCalling this API with an organization and user that match an `inactive` organization membership will activate the membership with the specified role(s).", + "operationId": "UserlandUserOrganizationMembershipsController_create", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateUserlandUserOrganizationMembershipDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "custom_attributes": { + "additionalProperties": {}, + "description": "An object containing IdP-sourced attributes from the linked [Directory User](/reference/directory-sync/directory-user) or [SSO Profile](/reference/sso/profile). Directory User attributes take precedence when both are linked.", + "example": { + "department": "Engineering", + "location": "Brooklyn", + "title": "Developer Experience Engineer" + }, + "type": "object" + }, + "directory_managed": { + "description": "Whether this organization membership is managed by a directory sync connection.", + "example": false, + "type": "boolean" + }, + "id": { + "description": "The unique ID of the organization membership.", + "example": "om_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "object": { + "const": "organization_membership", + "description": "Distinguishes the organization membership object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization which the user belongs to.", + "example": "org_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + }, + "organization_name": { + "description": "The name of the organization which the user belongs to.", + "example": "Acme Corp", + "type": "string" + }, + "role": { + "$ref": "#/components/schemas/SlimRole", + "description": "The primary role assigned to the user within the organization." + }, + "roles": { + "description": "The list of roles assigned to the user within the organization.", + "items": { + "$ref": "#/components/schemas/SlimRole" + }, + "type": "array" + }, + "status": { + "description": "The status of the organization membership. One of `active`, `inactive`, or `pending`.", + "enum": [ + "active", + "inactive", + "pending" + ], + "example": "active", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "user": { + "$ref": "#/components/schemas/UserlandUser", + "description": "The user that belongs to the organization through this membership." + }, + "user_id": { + "description": "The ID of the user.", + "example": "user_01E4ZCR3C5A4QZ2Z2JQXGKZJ9E", + "type": "string" + } + }, + "required": [ + "object", + "id", + "user_id", + "organization_id", + "status", + "directory_managed", + "created_at", + "updated_at", + "role", + "roles", + "user" + ], + "type": "object", + "x-inline-with-overrides": true + } + } + }, + "description": "Created" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "cannot_reactivate_pending_organization_membership", + "description": "The error code identifying the type of error.", + "example": "cannot_reactivate_pending_organization_membership", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "A pending organization membership cannot be reactivated. The user needs to accept the invitation instead.", + "type": "string" + } + }, + "required": [ + "message", + "code" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "code": { + "const": "invalid_request_parameters", + "description": "The error code identifying the type of error.", + "example": "invalid_request_parameters", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "invalid_role", + "description": "The error code identifying the type of error.", + "example": "invalid_role", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Role 'invalid_slug' is not a valid role.", + "type": "string" + } + }, + "required": [ + "message", + "code" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "multiple_roles_not_enabled", + "description": "The error code identifying the type of error.", + "example": "multiple_roles_not_enabled", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Multiple roles are not enabled for this environment.", + "type": "string" + } + }, + "required": [ + "message", + "code" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "sub_resource_scoped_role_not_allowed", + "description": "The error code identifying the type of error.", + "example": "sub_resource_scoped_role_not_allowed", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Sub-resource scoped roles are not allowed for this operation.", + "type": "string" + }, + "role_slug": { + "description": "The slug of the role that is not allowed.", + "example": "admin", + "type": "string" + } + }, + "required": [ + "message", + "code", + "role_slug" + ], + "type": "object" + } + ] + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Create an organization membership", + "tags": [ + "user-management.organization-membership" + ], + "x-mutually-exclusive-body-groups": { + "role": { + "optional": true, + "variants": { + "multiple": [ + "role_slugs" + ], + "single": [ + "role_slug" + ] + } + } + } + } + }, + "/user_management/organization_memberships/{id}": { + "delete": { + "description": "Permanently deletes an existing organization membership. It cannot be undone.", + "operationId": "UserlandUserOrganizationMembershipsController_delete", + "parameters": [ + { + "description": "The unique ID of the organization membership.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "om_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Delete an organization membership", + "tags": [ + "user-management.organization-membership" + ] + }, + "get": { + "description": "Get the details of an existing organization membership.", + "operationId": "UserlandUserOrganizationMembershipsController_get", + "parameters": [ + { + "description": "The unique ID of the organization membership.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "om_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserlandUserOrganizationMembership" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get an organization membership", + "tags": [ + "user-management.organization-membership" + ] + }, + "put": { + "description": "Update the details of an existing organization membership.", + "operationId": "UserlandUserOrganizationMembershipsController_update", + "parameters": [ + { + "description": "The unique ID of the organization membership.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "om_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateUserlandUserOrganizationMembershipDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserlandUserOrganizationMembership" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "code": { + "const": "invalid_request_parameters", + "description": "The error code identifying the type of error.", + "example": "invalid_request_parameters", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "invalid_role", + "description": "The error code identifying the type of error.", + "example": "invalid_role", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Role 'invalid_slug' is not a valid role.", + "type": "string" + } + }, + "required": [ + "message", + "code" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "multiple_roles_not_enabled", + "description": "The error code identifying the type of error.", + "example": "multiple_roles_not_enabled", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Multiple roles are not enabled for this environment.", + "type": "string" + } + }, + "required": [ + "message", + "code" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "sub_resource_scoped_role_not_allowed", + "description": "The error code identifying the type of error.", + "example": "sub_resource_scoped_role_not_allowed", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Sub-resource scoped roles are not allowed for this operation.", + "type": "string" + }, + "role_slug": { + "description": "The slug of the role that is not allowed.", + "example": "admin", + "type": "string" + } + }, + "required": [ + "message", + "code", + "role_slug" + ], + "type": "object" + } + ] + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Update an organization membership", + "tags": [ + "user-management.organization-membership" + ], + "x-mutually-exclusive-body-groups": { + "role": { + "optional": true, + "variants": { + "multiple": [ + "role_slugs" + ], + "single": [ + "role_slug" + ] + } + } + } + } + }, + "/user_management/organization_memberships/{id}/deactivate": { + "put": { + "description": "Deactivates an `active` organization membership. Emits an [organization_membership.updated](/events/organization-membership) event upon successful deactivation.\n\n- Deactivating an `inactive` membership is a no-op and does not emit an event.\n- Deactivating a `pending` membership returns an error. This membership should be [deleted](/reference/authkit/organization-membership/delete) instead.\n\nSee the [membership management documentation](/authkit/users-organizations/organizations/membership-management) for additional details.", + "operationId": "UserlandUserOrganizationMembershipsController_deactivate", + "parameters": [ + { + "description": "The unique ID of the organization membership.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "om_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "custom_attributes": { + "additionalProperties": {}, + "description": "An object containing IdP-sourced attributes from the linked [Directory User](/reference/directory-sync/directory-user) or [SSO Profile](/reference/sso/profile). Directory User attributes take precedence when both are linked.", + "example": { + "department": "Engineering", + "location": "Brooklyn", + "title": "Developer Experience Engineer" + }, + "type": "object" + }, + "directory_managed": { + "description": "Whether this organization membership is managed by a directory sync connection.", + "example": false, + "type": "boolean" + }, + "id": { + "description": "The unique ID of the organization membership.", + "example": "om_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + }, + "object": { + "const": "organization_membership", + "description": "Distinguishes the organization membership object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization which the user belongs to.", + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + }, + "organization_name": { + "description": "The name of the organization which the user belongs to.", + "example": "Acme Corp", + "type": "string" + }, + "role": { + "$ref": "#/components/schemas/SlimRole", + "description": "The primary role assigned to the user within the organization." + }, + "roles": { + "description": "The list of roles assigned to the user within the organization.", + "items": { + "$ref": "#/components/schemas/SlimRole" + }, + "type": "array" + }, + "status": { + "description": "The status of the organization membership. One of `active`, `inactive`, or `pending`.", + "enum": [ + "active", + "inactive", + "pending" + ], + "example": "inactive", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "user": { + "$ref": "#/components/schemas/UserlandUser", + "description": "The user that belongs to the organization through this membership." + }, + "user_id": { + "description": "The ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + "required": [ + "object", + "id", + "user_id", + "organization_id", + "status", + "directory_managed", + "created_at", + "updated_at", + "role", + "roles", + "user" + ], + "type": "object", + "x-inline-with-overrides": true + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "cannot_deactivate_pending_organization_membership", + "description": "The error code identifying the type of error.", + "example": "cannot_deactivate_pending_organization_membership", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "A pending organization membership cannot be deactivated. This membership should be deleted instead.", + "type": "string" + } + }, + "required": [ + "message", + "code" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "invalid_request_parameters", + "description": "The error code identifying the type of error.", + "example": "invalid_request_parameters", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Deactivate an organization membership", + "tags": [ + "user-management.organization-membership" + ] + } + }, + "/user_management/organization_memberships/{id}/reactivate": { + "put": { + "description": "Reactivates an `inactive` organization membership, retaining the pre-existing role(s). Emits an [organization_membership.updated](/events/organization-membership) event upon successful reactivation.\n\n- Reactivating an `active` membership is a no-op and does not emit an event.\n- Reactivating a `pending` membership returns an error. The user needs to [accept the invitation](/authkit/invitations) instead.\n\nSee the [membership management documentation](/authkit/users-organizations/organizations/membership-management) for additional details.", + "operationId": "UserlandUserOrganizationMembershipsController_reactivate", + "parameters": [ + { + "description": "The unique ID of the organization membership.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "om_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserlandUserOrganizationMembership" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "cannot_reactivate_pending_organization_membership", + "description": "The error code identifying the type of error.", + "example": "cannot_reactivate_pending_organization_membership", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "A pending organization membership cannot be reactivated. The user needs to accept the invitation instead.", + "type": "string" + } + }, + "required": [ + "message", + "code" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "invalid_request_parameters", + "description": "The error code identifying the type of error.", + "example": "invalid_request_parameters", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Reactivate an organization membership", + "tags": [ + "user-management.organization-membership" + ] + } + }, + "/user_management/organization_memberships/{omId}/groups": { + "get": { + "description": "Get a list of groups that an organization membership belongs to.", + "operationId": "OrganizationMembershipGroupsController_listGroups", + "parameters": [ + { + "description": "Unique identifier of the Organization Membership.", + "in": "path", + "name": "omId", + "required": true, + "schema": { + "example": "om_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "xxx_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "xxx_01HXYZ987654321KJIHGFEDCBA", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "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).", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GroupList" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "List groups", + "tags": [ + "user-management.organization-membership.groups" + ], + "x-feature-flag": "user-groups-enabled" + } + }, + "/user_management/password_reset": { + "post": { + "description": "Creates a one-time token that can be used to reset a user's password.", + "operationId": "UserlandUsersController_createPasswordResetToken", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreatePasswordResetTokenDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PasswordReset" + } + } + }, + "description": "Created" + }, + "403": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "code": { + "const": "email_password_auth_disabled", + "description": "The error code identifying the type of error.", + "example": "email_password_auth_disabled", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "password_reset_not_allowed", + "description": "The error code identifying the type of error.", + "example": "password_reset_not_allowed", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + ] + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "invalid_request_parameters", + "description": "The error code identifying the type of error.", + "example": "invalid_request_parameters", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + }, + "429": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "daily_quota_exceeded", + "description": "The error code identifying the type of error.", + "example": "daily_quota_exceeded", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "" + } + }, + "summary": "Create a password reset token", + "tags": [ + "user-management.users" + ], + "x-sends-email": true + } + }, + "/user_management/password_reset/confirm": { + "post": { + "description": "Sets a new password using the `token` query parameter from the link that the user received. Successfully resetting the password will verify a user's email, if it hasn't been verified yet.", + "operationId": "UserlandUsersController_resetPassword[0]", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreatePasswordResetDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResetPasswordResponse" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "password_reset_error", + "description": "The error code identifying the type of error.", + "example": "password_reset_error", + "type": "string" + }, + "errors": { + "description": "The list of validation errors.", + "items": { + "properties": { + "code": { + "description": "The validation error code.", + "example": "unknown_event_type", + "type": "string" + }, + "message": { + "description": "A human-readable description of the validation error.", + "example": "Invalid enum value.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "code", + "message", + "errors" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "email_password_auth_disabled", + "description": "The error code identifying the type of error.", + "example": "email_password_auth_disabled", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Forbidden" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "invalid_request_parameters", + "description": "The error code identifying the type of error.", + "example": "invalid_request_parameters", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Reset the password", + "tags": [ + "user-management.users" + ] + } + }, + "/user_management/password_reset/{id}": { + "get": { + "description": "Get the details of an existing password reset token that can be used to reset a user's password.", + "operationId": "UserlandUsersController_getPasswordReset", + "parameters": [ + { + "description": "The ID of the password reset token.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "password_reset_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PasswordReset" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get a password reset token", + "tags": [ + "user-management.users" + ] + } + }, + "/user_management/redirect_uris": { + "post": { + "description": "Creates a new redirect URI for an application.", + "operationId": "RedirectUrisController_create", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateRedirectUriDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "example": { + "created_at": "2026-01-15T12:00:00.000Z", + "default": true, + "id": "ruri_01EHZNVPK3SFK441A1RGBFSHRT", + "object": "redirect_uri", + "updated_at": "2026-01-15T12:00:00.000Z", + "uri": "https://example.com/callback" + }, + "schema": { + "$ref": "#/components/schemas/RedirectUri" + } + } + }, + "description": "Redirect URI created successfully." + }, + "400": { + "content": { + "application/json": { + "example": { + "message": "Bad Request" + }, + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "401": { + "content": { + "application/json": { + "example": { + "message": "Unauthorized" + }, + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unauthorized" + }, + "422": { + "content": { + "application/json": { + "example": { + "message": "Redirect URI 'https://example.com/callback' already exists." + }, + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Validation failed." + } + }, + "summary": "Create a redirect URI", + "tags": [ + "user-management.redirect-uris" + ] + } + }, + "/user_management/sessions/logout": { + "get": { + "description": "Logout a user from the current [session](/reference/authkit/session).", + "operationId": "UserlandSessionsController_logout", + "parameters": [ + { + "description": "The ID of the session. This can be extracted from the `sid` claim of the access token.", + "in": "query", + "name": "session_id", + "required": true, + "schema": { + "example": "session_01H93ZY4F80QPBEZ1R5B2SHQG8", + "type": "string" + } + }, + { + "description": "The URL to redirect the user to after logout.", + "in": "query", + "name": "return_to", + "required": false, + "schema": { + "example": "https://example.com", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "location": { + "schema": { + "format": "uri", + "type": "string" + } + } + } + }, + "302": { + "description": "", + "headers": { + "location": { + "schema": { + "format": "uri", + "type": "string" + } + } + } + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "security": [], + "summary": "Logout", + "tags": [ + "user-management.authentication" + ] + } + }, + "/user_management/sessions/revoke": { + "post": { + "description": "Revoke a [user session](/reference/authkit/session).", + "operationId": "UserlandSessionsController_revokeSession", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserlandRevokeSessionDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + } + }, + "summary": "Revoke Session", + "tags": [ + "user-management.authentication" + ] + } + }, + "/user_management/users": { + "get": { + "description": "Get a list of all of your existing users matching the criteria specified.", + "operationId": "UserlandUsersController_list[0]", + "parameters": [ + { + "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\"`.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "xxx_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "xxx_01HXYZ987654321KJIHGFEDCBA", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "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).", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + }, + { + "deprecated": true, + "description": "Filter users by the organization they are a member of. Deprecated in favor of `organization_id`.", + "in": "query", + "name": "organization", + "required": false, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + }, + { + "description": "Filter users by the organization they are a member of.", + "in": "query", + "name": "organization_id", + "required": false, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + }, + { + "description": "Filter users by their email address.", + "in": "query", + "name": "email", + "required": false, + "schema": { + "example": "user@example.com", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserlandUserList" + } + } + }, + "description": "OK" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "List users", + "tags": [ + "user-management.users" + ] + }, + "post": { + "description": "Create a new user in the current environment.", + "operationId": "UserlandUsersController_create[0]", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateUserlandUserDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserlandUser" + } + } + }, + "description": "Created" + }, + "400": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "code": { + "const": "password_strength_error", + "description": "The error code identifying the type of error.", + "example": "password_strength_error", + "type": "string" + }, + "errors": { + "description": "The list of validation errors.", + "items": { + "properties": { + "code": { + "description": "The validation error code.", + "example": "unknown_event_type", + "type": "string" + }, + "message": { + "description": "A human-readable description of the validation error.", + "example": "Invalid enum value.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "code", + "message", + "errors" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "user_creation_error", + "description": "The error code identifying the type of error.", + "example": "user_creation_error", + "type": "string" + }, + "errors": { + "description": "The list of validation errors.", + "items": { + "properties": { + "code": { + "description": "The validation error code.", + "example": "unknown_event_type", + "type": "string" + }, + "message": { + "description": "A human-readable description of the validation error.", + "example": "Invalid enum value.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "code", + "message", + "errors" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "invalid_password_hash", + "description": "The error code identifying the type of error.", + "example": "invalid_password_hash", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "password_and_password_hash_provided", + "description": "The error code identifying the type of error.", + "example": "password_and_password_hash_provided", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "password_and_password_hash_type_provided", + "description": "The error code identifying the type of error.", + "example": "password_and_password_hash_type_provided", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "invalid_metadata", + "description": "The error code identifying the type of error.", + "example": "invalid_metadata", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + ] + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "invalid_request_parameters", + "description": "The error code identifying the type of error.", + "example": "invalid_request_parameters", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Create a user", + "tags": [ + "user-management.users" + ], + "x-mutually-exclusive-body-groups": { + "password": { + "optional": true, + "variants": { + "hashed": [ + "password_hash", + "password_hash_type" + ], + "plaintext": [ + "password" + ] + } + } + } + } + }, + "/user_management/users/external_id/{external_id}": { + "get": { + "description": "Get the details of an existing user by an [external identifier](/authkit/metadata/external-identifiers).", + "operationId": "UserlandUsersController_getByExternalId", + "parameters": [ + { + "description": "The external ID of the user.", + "in": "path", + "name": "external_id", + "required": true, + "schema": { + "example": "f1ffa2b2-c20b-4d39-be5c-212726e11222", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserlandUser" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get a user by external ID", + "tags": [ + "user-management.users" + ] + } + }, + "/user_management/users/{id}": { + "delete": { + "description": "Permanently deletes a user in the current environment. It cannot be undone.", + "operationId": "UserlandUsersController_delete[0]", + "parameters": [ + { + "description": "The unique ID of the user.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Delete a user", + "tags": [ + "user-management.users" + ] + }, + "get": { + "description": "Get the details of an existing user.", + "operationId": "UserlandUsersController_get[0]", + "parameters": [ + { + "description": "The unique ID of the user.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserlandUser" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get a user", + "tags": [ + "user-management.users" + ] + }, + "put": { + "description": "Updates properties of a user. The omitted properties will be left unchanged.", + "operationId": "UserlandUsersController_update[0]", + "parameters": [ + { + "description": "The unique ID of the user.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateUserlandUserDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserlandUser" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "code": { + "const": "password_strength_error", + "description": "The error code identifying the type of error.", + "example": "password_strength_error", + "type": "string" + }, + "errors": { + "description": "The list of validation errors.", + "items": { + "properties": { + "code": { + "description": "The validation error code.", + "example": "unknown_event_type", + "type": "string" + }, + "message": { + "description": "A human-readable description of the validation error.", + "example": "Invalid enum value.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "code", + "message", + "errors" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "invalid_password_hash", + "description": "The error code identifying the type of error.", + "example": "invalid_password_hash", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "password_and_password_hash_provided", + "description": "The error code identifying the type of error.", + "example": "password_and_password_hash_provided", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "password_and_password_hash_type_provided", + "description": "The error code identifying the type of error.", + "example": "password_and_password_hash_type_provided", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "email_already_verified", + "description": "The error code identifying the type of error.", + "example": "email_already_verified", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "invalid_metadata", + "description": "The error code identifying the type of error.", + "example": "invalid_metadata", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "external_id_already_used", + "description": "The error code identifying the type of error.", + "example": "external_id_already_used", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "email_change_not_allowed", + "description": "The error code identifying the type of error.", + "example": "email_change_not_allowed", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "email_not_available", + "description": "The error code identifying the type of error.", + "example": "email_not_available", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "invalid_email", + "description": "The error code identifying the type of error.", + "example": "invalid_email", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "invalid_locale", + "description": "The error code identifying the type of error.", + "example": "invalid_locale", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + ] + } + } + }, + "description": "Bad Request" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "invalid_request_parameters", + "description": "The error code identifying the type of error.", + "example": "invalid_request_parameters", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Update a user", + "tags": [ + "user-management.users" + ], + "x-mutually-exclusive-body-groups": { + "password": { + "optional": true, + "variants": { + "hashed": [ + "password_hash", + "password_hash_type" + ], + "plaintext": [ + "password" + ] + } + } + } + } + }, + "/user_management/users/{id}/email_change/confirm": { + "post": { + "description": "Confirms an email change using the one-time code received by the user.", + "operationId": "UserlandUsersController_confirmEmailChange", + "parameters": [ + { + "description": "The unique ID of the user.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConfirmEmailChangeDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "object": { + "const": "email_change_confirmation", + "description": "Distinguishes the email change confirmation object.", + "type": "string" + }, + "user": { + "description": "The user object.", + "properties": { + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "email": { + "description": "The email address of the user.", + "example": "new.email@example.com", + "type": "string" + }, + "email_verified": { + "description": "Whether the user's email has been verified.", + "example": true, + "type": "boolean" + }, + "external_id": { + "description": "The external ID of the user.", + "example": "f1ffa2b2-c20b-4d39-be5c-212726e11222", + "type": [ + "string", + "null" + ] + }, + "first_name": { + "description": "The first name of the user.", + "example": "Marcelina", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "The unique ID of the user.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + }, + "last_name": { + "description": "The last name of the user.", + "example": "Davis", + "type": [ + "string", + "null" + ] + }, + "last_sign_in_at": { + "description": "The timestamp when the user last signed in.", + "example": "2025-06-25T19:07:33.155Z", + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "locale": { + "description": "The user's preferred locale.", + "example": "en-US", + "type": [ + "string", + "null" + ] + }, + "metadata": { + "additionalProperties": { + "maxLength": 600, + "type": "string" + }, + "description": "Object containing metadata key/value pairs associated with the user.", + "example": { + "timezone": "America/New_York" + }, + "maxProperties": 50, + "propertyNames": { + "maxLength": 40 + }, + "type": "object" + }, + "name": { + "description": "The user's full name.", + "example": "Marcelina Davis", + "type": [ + "string", + "null" + ] + }, + "object": { + "const": "user", + "description": "Distinguishes the user object.", + "type": "string" + }, + "profile_picture_url": { + "description": "A URL reference to an image representing the user.", + "example": "https://workoscdn.com/images/v1/123abc", + "type": [ + "string", + "null" + ] + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + } + }, + "required": [ + "object", + "id", + "first_name", + "last_name", + "profile_picture_url", + "email", + "email_verified", + "external_id", + "last_sign_in_at", + "created_at", + "updated_at" + ], + "type": "object" + } + }, + "required": [ + "object", + "user" + ], + "type": "object", + "x-inline-with-overrides": true + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "code": { + "const": "email_change_code_expired", + "description": "The error code identifying the type of error.", + "example": "email_change_code_expired", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "email_change_code_incorrect", + "description": "The error code identifying the type of error.", + "example": "email_change_code_incorrect", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + ] + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "409": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "code": { + "const": "no_pending_email_change", + "description": "The error code identifying the type of error.", + "example": "no_pending_email_change", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "email_change_code_previously_used", + "description": "The error code identifying the type of error.", + "example": "email_change_code_previously_used", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "email_not_available", + "description": "The error code identifying the type of error.", + "example": "email_not_available", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "email_change_not_allowed", + "description": "The error code identifying the type of error.", + "example": "email_change_not_allowed", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + ] + } + } + }, + "description": "" + }, + "422": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "code": { + "const": "invalid_request_parameters", + "description": "The error code identifying the type of error.", + "example": "invalid_request_parameters", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "invalid_email", + "description": "The error code identifying the type of error.", + "example": "invalid_email", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + ] + } + } + }, + "description": "Unprocessable Entity" + }, + "429": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "email_change_too_many_attempts", + "description": "The error code identifying the type of error.", + "example": "email_change_too_many_attempts", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "" + } + }, + "summary": "Confirm email change", + "tags": [ + "user-management.users" + ] + } + }, + "/user_management/users/{id}/email_change/send": { + "post": { + "description": "Sends an email that contains a one-time code used to change a user's email address.", + "operationId": "UserlandUsersController_sendEmailChange", + "parameters": [ + { + "description": "The unique ID of the user.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SendEmailChangeDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmailChange" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "409": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "code": { + "const": "email_change_not_needed", + "description": "The error code identifying the type of error.", + "example": "email_change_not_needed", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "email_not_available", + "description": "The error code identifying the type of error.", + "example": "email_not_available", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "email_change_not_allowed", + "description": "The error code identifying the type of error.", + "example": "email_change_not_allowed", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + ] + } + } + }, + "description": "" + }, + "422": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "code": { + "const": "invalid_request_parameters", + "description": "The error code identifying the type of error.", + "example": "invalid_request_parameters", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "invalid_email", + "description": "The error code identifying the type of error.", + "example": "invalid_email", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + ] + } + } + }, + "description": "Unprocessable Entity" + }, + "429": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "daily_quota_exceeded", + "description": "The error code identifying the type of error.", + "example": "daily_quota_exceeded", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "" + } + }, + "summary": "Send email change code", + "tags": [ + "user-management.users" + ], + "x-sends-email": true + } + }, + "/user_management/users/{id}/email_verification/confirm": { + "post": { + "description": "Verifies an email address using the one-time code received by the user.", + "operationId": "UserlandUsersController_emailVerification[0]", + "parameters": [ + { + "description": "The ID of the user.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VerifyEmailAddressDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VerifyEmailResponse" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "code": { + "const": "email_previously_verified", + "description": "The error code identifying the type of error.", + "example": "email_previously_verified", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "email_verification_code_previously_used", + "description": "The error code identifying the type of error.", + "example": "email_verification_code_previously_used", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "email_verification_code_expired", + "description": "The error code identifying the type of error.", + "example": "email_verification_code_expired", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "email_verification_code_incorrect", + "description": "The error code identifying the type of error.", + "example": "email_verification_code_incorrect", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + ] + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "invalid_request_parameters", + "description": "The error code identifying the type of error.", + "example": "invalid_request_parameters", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Verify email", + "tags": [ + "user-management.users" + ] + } + }, + "/user_management/users/{id}/email_verification/send": { + "post": { + "description": "Sends an email that contains a one-time code used to verify a user's email address.", + "operationId": "UserlandUsersController_sendVerificationEmail[0]", + "parameters": [ + { + "description": "The ID of the user.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SendVerificationEmailResponse" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "email_already_verified", + "description": "The error code identifying the type of error.", + "example": "email_already_verified", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "429": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "daily_quota_exceeded", + "description": "The error code identifying the type of error.", + "example": "daily_quota_exceeded", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "" + } + }, + "summary": "Send verification email", + "tags": [ + "user-management.users" + ] + } + }, + "/user_management/users/{id}/identities": { + "get": { + "description": "Get a list of identities associated with the user. A user can have multiple associated identities after going through [identity linking](/authkit/identity-linking). Currently only OAuth identities are supported. More provider types may be added in the future.", + "operationId": "UserlandUserIdentitiesController_get", + "parameters": [ + { + "description": "The unique ID of the user.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "properties": { + "idp_id": { + "description": "The unique ID of the user in the external identity provider.", + "example": "4F42ABDE-1E44-4B66-824A-5F733C037A6D", + "type": "string" + }, + "provider": { + "description": "The type of OAuth provider for the identity.", + "enum": [ + "AppleOAuth", + "BitbucketOAuth", + "DiscordOAuth", + "GithubOAuth", + "GitLabOAuth", + "GoogleOAuth", + "IntuitOAuth", + "LinkedInOAuth", + "MicrosoftOAuth", + "SalesforceOAuth", + "SlackOAuth", + "VercelMarketplaceOAuth", + "VercelOAuth", + "XeroOAuth" + ], + "example": "MicrosoftOAuth", + "type": "string" + }, + "type": { + "const": "OAuth", + "description": "The type of the identity.", + "type": "string" + } + }, + "required": [ + "idp_id", + "type", + "provider" + ], + "type": "object" + }, + "type": "array" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Get user identities", + "tags": [ + "user-management.users" + ] + } + }, + "/user_management/users/{id}/sessions": { + "get": { + "description": "Get a list of all active sessions for a specific user.", + "operationId": "UserlandUserSessionsController_list", + "parameters": [ + { + "description": "The ID of the user.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "user_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "xxx_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "xxx_01HXYZ987654321KJIHGFEDCBA", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "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).", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "properties": { + "list_metadata": { + "description": "Pagination cursors for navigating between pages of results.", + "properties": { + "after": { + "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": "session_01HXYZ987654321KJIHGFEDCBA", + "type": [ + "string", + "null" + ] + }, + "before": { + "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": "session_01HXYZ123456789ABCDEFGHIJ", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "before", + "after" + ], + "type": "object" + }, + "object": { + "const": "list", + "description": "Indicates this is a list response.", + "type": "string" + } + }, + "type": "object" + }, + { + "properties": { + "data": { + "description": "The list of records for the current page.", + "items": { + "properties": { + "auth_method": { + "description": "The authentication method used to create this session.", + "enum": [ + "cross_app_auth", + "external_auth", + "impersonation", + "magic_code", + "migrated_session", + "oauth", + "passkey", + "password", + "sso", + "unknown" + ], + "example": "sso", + "type": "string" + }, + "created_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "ended_at": { + "description": "The timestamp when the session ended.", + "example": null, + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "expires_at": { + "description": "The timestamp when the session expires.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "id": { + "description": "The unique ID of the session.", + "example": "session_01H93ZY4F80QPBEZ1R5B2SHQG8", + "type": "string" + }, + "impersonator": { + "description": "Information about the impersonator if this session was created via impersonation.", + "properties": { + "email": { + "description": "The email address of the WorkOS Dashboard user who is impersonating the user.", + "example": "admin@foocorp.com", + "type": "string" + }, + "reason": { + "description": "The justification the impersonator gave for impersonating the user.", + "example": "Investigating an issue with the customer's account.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "email", + "reason" + ], + "type": "object" + }, + "ip_address": { + "description": "The IP address from which the session was created.", + "example": "198.51.100.42", + "type": [ + "string", + "null" + ] + }, + "object": { + "const": "session", + "description": "Distinguishes the session object.", + "type": "string" + }, + "organization_id": { + "description": "The ID of the organization this session is associated with.", + "example": "org_01H945H0YD4F97JN9MATX7BYAG", + "type": "string" + }, + "status": { + "description": "The current status of the session.", + "enum": [ + "active", + "expired", + "revoked" + ], + "example": "active", + "type": "string" + }, + "updated_at": { + "description": "An ISO 8601 timestamp.", + "example": "2026-01-15T12:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "user_agent": { + "description": "The user agent string from the device that created the session.", + "example": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36", + "type": [ + "string", + "null" + ] + }, + "user_id": { + "description": "The ID of the user this session belongs to.", + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + "required": [ + "object", + "id", + "ip_address", + "user_agent", + "user_id", + "auth_method", + "status", + "expires_at", + "ended_at", + "created_at", + "updated_at" + ], + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + ] + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "invalid_request_parameters", + "description": "The error code identifying the type of error.", + "example": "invalid_request_parameters", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "List sessions", + "tags": [ + "user-management.users" + ] + } + }, + "/user_management/users/{userId}/api_keys": { + "get": { + "description": "Get a list of API keys owned by a specific user.", + "operationId": "UserApiKeysController_list", + "parameters": [ + { + "description": "Unique identifier of the user.", + "in": "path", + "name": "userId", + "required": true, + "schema": { + "example": "user_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + }, + { + "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.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "obj_1234567890", + "type": "string" + } + }, + { + "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.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "obj_1234567890", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "description": "Order the results by the creation time.", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + }, + { + "description": "The ID of the organization to filter user API keys by. When provided, only API keys created against that organization membership are returned.", + "in": "query", + "name": "organization_id", + "required": false, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserApiKeyList" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "List API keys for a user", + "tags": [ + "api_keys" + ], + "x-feature-flag": "user-api-keys" + }, + "post": { + "description": "Create a new API key owned by a user. The user must have an active membership in the specified organization.", + "operationId": "UserApiKeysController_create", + "parameters": [ + { + "description": "Unique identifier of the user.", + "in": "path", + "name": "userId", + "required": true, + "schema": { + "example": "user_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateUserApiKeyDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserApiKeyWithValue" + } + } + }, + "description": "Created" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "errors": { + "description": "The list of validation errors.", + "items": { + "properties": { + "code": { + "description": "The validation error code.", + "example": "required", + "type": "string" + }, + "field": { + "description": "The field that failed validation.", + "example": "event.action", + "type": "string" + } + }, + "required": [ + "code", + "field" + ], + "type": "object" + }, + "type": "array" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "message", + "errors" + ], + "type": "object" + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Create an API key for a user", + "tags": [ + "api_keys" + ], + "x-feature-flag": "user-api-keys" + } + }, + "/user_management/users/{userId}/feature-flags": { + "get": { + "description": "Get a list of all enabled feature flags for the provided user. This includes feature flags enabled specifically for the user as well as any organizations that the user is a member of.", + "operationId": "UserlandUserFeatureFlagsController_list", + "parameters": [ + { + "description": "The ID of the user.", + "in": "path", + "name": "userId", + "required": true, + "schema": { + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + { + "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.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "obj_1234567890", + "type": "string" + } + }, + { + "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.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "obj_1234567890", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "description": "Order the results by the creation time.", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FlagList" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "List enabled feature flags for a user", + "tags": [ + "user-management.users.feature-flags" + ] + } + }, + "/user_management/users/{user_id}/authorized_applications": { + "get": { + "description": "Get a list of all Connect applications that the user has authorized.", + "operationId": "AuthorizedApplicationsController_list", + "parameters": [ + { + "description": "The ID of the user.", + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "xxx_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "xxx_01HXYZ987654321KJIHGFEDCBA", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "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).", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthorizedConnectApplicationList" + } + } + }, + "description": "OK" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "List authorized applications", + "tags": [ + "user-management.users.authorized-applications" + ] + } + }, + "/user_management/users/{user_id}/authorized_applications/{application_id}": { + "delete": { + "description": "Delete an existing Authorized Connect Application.", + "operationId": "AuthorizedApplicationsController_delete", + "parameters": [ + { + "description": "The ID or client ID of the application.", + "in": "path", + "name": "application_id", + "required": true, + "schema": { + "example": "conn_app_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "description": "The ID of the user.", + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + } + }, + "summary": "Delete an authorized application", + "tags": [ + "user-management.users.authorized-applications" + ] + } + }, + "/user_management/users/{user_id}/connected_accounts/{slug}": { + "delete": { + "description": "Disconnects WorkOS's account for the user, including removing any stored access and refresh tokens. The user will need to reauthorize if they want to reconnect. This does not revoke access on the provider side.", + "operationId": "DataIntegrationsUserManagementController_deleteUserDataInstallation", + "parameters": [ + { + "description": "A [User](/reference/authkit/user) identifier.", + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "example": "user_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + }, + { + "description": "The slug identifier of the provider (e.g., `github`, `slack`, `notion`).", + "in": "path", + "name": "slug", + "required": true, + "schema": { + "example": "github", + "type": "string" + } + }, + { + "description": "An [Organization](/reference/organization) identifier. Optional parameter if the connection is scoped to an organization.", + "in": "query", + "name": "organization_id", + "required": false, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "The connected account was deleted successfully." + }, + "401": { + "description": "The request is missing a valid API key." + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "The user, organization, or connected account was not found." + } + }, + "summary": "Delete a connected account", + "tags": [ + "user-management.data-providers" + ] + }, + "get": { + "description": "Retrieves a user's [connected account](/reference/pipes/connected-account) for a specific provider.", + "operationId": "DataIntegrationsUserManagementController_getUserDataInstallation", + "parameters": [ + { + "description": "A [User](/reference/authkit/user) identifier.", + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "example": "user_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + }, + { + "description": "The slug identifier of the provider (e.g., `github`, `slack`, `notion`).", + "in": "path", + "name": "slug", + "required": true, + "schema": { + "example": "github", + "type": "string" + } + }, + { + "description": "An [Organization](/reference/organization) identifier. Optional parameter if the connection is scoped to an organization.", + "in": "query", + "name": "organization_id", + "required": false, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConnectedAccount" + } + } + }, + "description": "The connected account was retrieved successfully." + }, + "401": { + "description": "The request is missing a valid API key." + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "The user, organization, or connected account was not found." + } + }, + "summary": "Get a connected account", + "tags": [ + "user-management.data-providers" + ] + } + }, + "/user_management/users/{user_id}/data_providers": { + "get": { + "description": "Retrieves a list of available providers and the user's connection status for each. Returns all providers configured for your environment, along with the user's [connected account](/reference/pipes/connected-account) information where applicable.", + "operationId": "DataIntegrationsUserManagementController_getUserDataIntegrations", + "parameters": [ + { + "description": "A [User](/reference/authkit/user) identifier to list providers and connected accounts for.", + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "example": "user_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + }, + { + "description": "An [Organization](/reference/organization) identifier. Optional parameter to filter connections for a specific organization.", + "in": "query", + "name": "organization_id", + "required": false, + "schema": { + "example": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DataIntegrationsListResponse" + } + } + }, + "description": "The list of data providers was retrieved successfully." + }, + "401": { + "description": "The request is missing a valid API key." + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "The user or organization was not found." + } + }, + "summary": "List providers for a user", + "tags": [ + "user-management.data-providers" + ] + } + }, + "/user_management/users/{userlandUserId}/auth_factors": { + "get": { + "description": "Lists the [authentication factors](/reference/authkit/mfa/authentication-factor) for a user.", + "operationId": "UserlandUserAuthenticationFactorsController_list[0]", + "parameters": [ + { + "description": "The ID of the [user](/reference/authkit/user).", + "in": "path", + "name": "userlandUserId", + "required": true, + "schema": { + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + }, + { + "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.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "obj_1234567890", + "type": "string" + } + }, + { + "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.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "obj_1234567890", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "description": "Order the results by the creation time.", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserlandUserAuthenticationFactorList" + } + } + }, + "description": "OK" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "List authentication factors", + "tags": [ + "user-management.multi-factor-authentication" + ] + }, + "post": { + "description": "Enrolls a user in a new [authentication factor](/reference/authkit/mfa/authentication-factor).", + "operationId": "UserlandUserAuthenticationFactorsController_create[0]", + "parameters": [ + { + "description": "The ID of the [user](/reference/authkit/user).", + "in": "path", + "name": "userlandUserId", + "required": true, + "schema": { + "example": "user_01E4ZCR3C56J083X43JQXF3JK5", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EnrollUserlandUserAuthenticationFactorDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserlandUserAuthenticationFactorEnrollResponse" + } + } + }, + "description": "Created" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Enroll an authentication factor", + "tags": [ + "user-management.multi-factor-authentication" + ] + } + }, + "/vault/v1/keys/data-key": { + "post": { + "description": "Generate an isolated encryption key for local encryption operations.", + "operationId": "JumpWireWeb.KeyController.create_data_key", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateDataKeyRequest" + } + } + }, + "description": "Data key request.", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateDataKeyResponse" + } + } + }, + "description": "Data key." + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "Bad request." + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "Validation error." + } + }, + "summary": "Create a data key", + "tags": [ + "vault" + ] + } + }, + "/vault/v1/keys/decrypt": { + "post": { + "description": "Decrypt a previously encrypted data key from WorkOS Vault.", + "operationId": "JumpWireWeb.KeyController.decrypt", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DecryptRequest" + } + } + }, + "description": "Decrypt request.", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DecryptResponse" + } + } + }, + "description": "Decrypted key." + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "Bad request." + } + }, + "summary": "Decrypt a data key", + "tags": [ + "vault" + ] + } + }, + "/vault/v1/keys/rekey": { + "post": { + "description": "Decrypt an existing data key and re-encrypt it under a new key context.", + "operationId": "JumpWireWeb.KeyController.rekey", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RekeyRequest" + } + } + }, + "description": "Rekey request.", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateDataKeyResponse" + } + } + }, + "description": "Re-encrypted key." + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "Bad request." + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "Validation error." + } + }, + "summary": "Re-encrypt a data key", + "tags": [ + "vault" + ] + } + }, + "/vault/v1/kv": { + "get": { + "description": "List all encrypted objects with cursor-based pagination.", + "operationId": "JumpWireWeb.DataVaultController.index", + "parameters": [ + { + "description": "Upper limit on the number of objects to return.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "minimum": 1, + "type": "integer" + } + }, + { + "description": "Cursor for the previous page of results.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "b21f3a8c-7e4d-4b1a-9c5e-2d8f6a7b3c4e", + "type": "string" + } + }, + { + "description": "Cursor for the next page of results.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "a10e2b7d-6c3f-4a2b-8d1e-3f9a5b8c7d6e", + "type": "string" + } + }, + { + "description": "Sort direction for results.", + "in": "query", + "name": "order", + "required": false, + "schema": { + "enum": [ + "asc", + "desc" + ], + "example": "desc", + "type": "string" + } + }, + { + "description": "Filter results by name or structured search JSON.", + "in": "query", + "name": "search", + "required": false, + "schema": { + "example": "my-secret", + "type": "string" + } + }, + { + "description": "ISO 8601 timestamp to filter by last modified time.", + "in": "query", + "name": "updatedAfter", + "required": false, + "schema": { + "example": "2024-01-01T00:00:00Z", + "format": "date-time", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ObjectListResponse" + } + } + }, + "description": "Object list." + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "Bad request." + } + }, + "summary": "List objects", + "tags": [ + "vault" + ] + }, + "post": { + "description": "Encrypt and store a new key-value object.", + "operationId": "JumpWireWeb.DataVaultController.create", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateObjectRequest" + } + } + }, + "description": "Create object.", + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ObjectMetadata" + } + } + }, + "description": "Object created." + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "Bad request." + }, + "409": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "Conflict." + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "Validation error." + } + }, + "summary": "Create an object", + "tags": [ + "vault" + ] + } + }, + "/vault/v1/kv/name/{name}": { + "get": { + "description": "Fetch and decrypt an object by its unique name.", + "operationId": "JumpWireWeb.DataVaultController.show_by_name", + "parameters": [ + { + "description": "Unique name of the object.", + "in": "path", + "name": "name", + "required": true, + "schema": { + "example": "my-secret", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Object" + } + } + }, + "description": "Object." + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "Bad request." + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "Not found." + } + }, + "summary": "Read an object by name", + "tags": [ + "vault" + ] + } + }, + "/vault/v1/kv/{id}": { + "delete": { + "description": "Delete an encrypted object.", + "operationId": "JumpWireWeb.DataVaultController.delete", + "parameters": [ + { + "description": "Unique identifier of the object.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "type": "string" + } + }, + { + "description": "Expected current version for optimistic locking.", + "in": "query", + "name": "version_check", + "required": false, + "schema": { + "example": "c3d4e5f6-7890-abcd-ef12-34567890abcd", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteObjectResponse" + } + } + }, + "description": "Deletion result." + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "Not found." + }, + "409": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "Version mismatch." + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "Internal error." + } + }, + "summary": "Delete an object", + "tags": [ + "vault" + ] + }, + "get": { + "description": "Fetch and decrypt an object by its unique identifier.", + "operationId": "JumpWireWeb.DataVaultController.show_by_id", + "parameters": [ + { + "description": "Unique identifier of the object.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Object" + } + } + }, + "description": "Object." + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "Bad request." + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "Not found." + } + }, + "summary": "Read an object by ID", + "tags": [ + "vault" + ] + }, + "put": { + "description": "Update the value of an existing encrypted object.", + "operationId": "JumpWireWeb.DataVaultController.update", + "parameters": [ + { + "description": "Unique identifier of the object.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateObjectRequest" + } + } + }, + "description": "Update object.", + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ObjectWithoutValue" + } + } + }, + "description": "Object updated." + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "Bad request." + }, + "409": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "Version mismatch." + } + }, + "summary": "Update an object", + "tags": [ + "vault" + ] + } + }, + "/vault/v1/kv/{id}/metadata": { + "get": { + "description": "Fetch metadata for an object without decrypting it.", + "operationId": "JumpWireWeb.DataVaultController.describe", + "parameters": [ + { + "description": "Unique identifier of the object.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ObjectWithoutValue" + } + } + }, + "description": "Object metadata." + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "Bad request." + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "Not found." + } + }, + "summary": "Describe an object", + "tags": [ + "vault" + ] + } + }, + "/vault/v1/kv/{id}/versions": { + "get": { + "description": "Retrieve all versions for a specific object.", + "operationId": "JumpWireWeb.DataVaultController.versions", + "parameters": [ + { + "description": "Unique identifier of the object.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VersionListResponse" + } + } + }, + "description": "Version list." + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "Bad request." + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "Not found." + } + }, + "summary": "List object versions", + "tags": [ + "vault" + ] + } + }, + "/webhook_endpoints": { + "get": { + "description": "Get a list of all of your existing webhook endpoints.", + "operationId": "WebhookEndpointsController_list", + "parameters": [ + { + "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\"`.", + "in": "query", + "name": "before", + "required": false, + "schema": { + "example": "xxx_01HXYZ123456789ABCDEFGHIJ", + "type": "string" + } + }, + { + "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\"`.", + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": "xxx_01HXYZ987654321KJIHGFEDCBA", + "type": "string" + } + }, + { + "description": "Upper limit on the number of objects to return, between `1` and `100`.", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 10, + "example": 10, + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + { + "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).", + "in": "query", + "name": "order", + "required": false, + "schema": { + "$ref": "#/components/schemas/PaginationOrder" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WebhookEndpointList" + } + } + }, + "description": "List of webhook endpoints." + } + }, + "summary": "List Webhook Endpoints", + "tags": [ + "webhooks" + ] + }, + "post": { + "description": "Create a new webhook endpoint to receive event notifications.", + "operationId": "WebhookEndpointsController_create", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateWebhookEndpointDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WebhookEndpointJson" + } + } + }, + "description": "Webhook endpoint created successfully." + }, + "409": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "duplicate_endpoint", + "description": "The error code identifying the type of error.", + "example": "duplicate_endpoint", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "A Webhook Endpoint with the same endpoint URL already exists." + }, + "422": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "code": { + "const": "invalid_url", + "description": "The error code identifying the type of error.", + "example": "invalid_url", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "invalid_request_parameters", + "description": "The error code identifying the type of error.", + "example": "invalid_request_parameters", + "type": "string" + }, + "errors": { + "description": "The list of validation errors.", + "items": { + "properties": { + "code": { + "description": "The validation error code.", + "example": "unknown_event_type", + "type": "string" + }, + "message": { + "description": "A human-readable description of the validation error.", + "example": "Invalid enum value.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "code", + "message", + "errors" + ], + "type": "object" + } + ] + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Create a Webhook Endpoint", + "tags": [ + "webhooks" + ] + } + }, + "/webhook_endpoints/{id}": { + "delete": { + "description": "Delete an existing webhook endpoint.", + "operationId": "WebhookEndpointsController_delete", + "parameters": [ + { + "description": "Unique identifier of the Webhook Endpoint.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "we_0123456789", + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Webhook endpoint deleted successfully." + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "entity_not_found", + "description": "The error code identifying the type of error.", + "example": "entity_not_found", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Webhook endpoint not found." + } + }, + "summary": "Delete a Webhook Endpoint", + "tags": [ + "webhooks" + ] + }, + "patch": { + "description": "Update the properties of an existing webhook endpoint.", + "operationId": "WebhookEndpointsController_update", + "parameters": [ + { + "description": "Unique identifier of the Webhook Endpoint.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "example": "we_0123456789", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateWebhookEndpointDto" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WebhookEndpointJson" + } + } + }, + "description": "Webhook endpoint updated successfully." + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "entity_not_found", + "description": "The error code identifying the type of error.", + "example": "entity_not_found", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "Webhook endpoint not found." + }, + "409": { + "content": { + "application/json": { + "schema": { + "properties": { + "code": { + "const": "duplicate_endpoint", + "description": "The error code identifying the type of error.", + "example": "duplicate_endpoint", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + } + } + }, + "description": "A Webhook Endpoint with the same endpoint URL already exists." + }, + "422": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "code": { + "const": "invalid_url", + "description": "The error code identifying the type of error.", + "example": "invalid_url", + "type": "string" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Request could not be processed.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "properties": { + "code": { + "const": "invalid_request_parameters", + "description": "The error code identifying the type of error.", + "example": "invalid_request_parameters", + "type": "string" + }, + "errors": { + "description": "The list of validation errors.", + "items": { + "properties": { + "code": { + "description": "The validation error code.", + "example": "unknown_event_type", + "type": "string" + }, + "message": { + "description": "A human-readable description of the validation error.", + "example": "Invalid enum value.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "message": { + "description": "A human-readable description of the error.", + "example": "Validation failed.", + "type": "string" + } + }, + "required": [ + "code", + "message", + "errors" + ], + "type": "object" + } + ] + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Update a Webhook Endpoint", + "tags": [ + "webhooks" + ] + } + }, + "/widgets/token": { + "post": { + "description": "Generate a widget token scoped to an organization and user with the specified scopes.", + "operationId": "WidgetsPublicController_issueWidgetSessionToken", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WidgetSessionTokenDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WidgetSessionTokenResponse" + } + } + }, + "description": "Created" + }, + "400": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + }, + { + "properties": { + "error": { + "description": "The error type.", + "example": "Bad Request", + "type": "string" + }, + "message": { + "description": "A list of validation error messages.", + "example": [ + "organization_id must be a string" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "message", + "error" + ], + "type": "object" + } + ] + } + } + }, + "description": "Bad Request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Not Found" + }, + "422": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "A human-readable description of the error.", + "example": "Organization not found: 'org_01EHQMYV6MBK39QC5PZXHY59C3'.", + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + }, + "description": "Unprocessable Entity" + } + }, + "summary": "Generate a widget token", + "tags": [ + "widgets" + ] + } + } + }, + "security": [ + { + "bearer": [] + } + ], + "servers": [ + { + "description": "Production", + "url": "https://api.workos.com" + }, + { + "description": "Staging", + "url": "https://api.workos-test.com" + } + ], + "tags": [ + { + "description": "Endpoints for the Admin Portal API.", + "name": "admin-portal" + }, + { + "description": "Manage API keys for environments.", + "name": "api_keys" + }, + { + "description": "Manage client secrets for Connect Applications.", + "name": "application.client-secrets" + }, + { + "description": "Manage Connect Applications.", + "name": "applications" + }, + { + "description": "Create and query audit log events.", + "name": "audit-logs" + }, + { + "description": "Authorization and access control.", + "name": "authorization" + }, + { + "description": "Client GraphQL API token management.", + "name": "client" + }, + { + "description": "Manage SSO connections.", + "name": "connections" + }, + { + "description": "Manage directories.", + "name": "directories" + }, + { + "description": "Manage directory groups.", + "name": "directory-groups" + }, + { + "description": "Manage directory users.", + "name": "directory-users" + }, + { + "description": "Query events and event streams.", + "name": "events" + }, + { + "description": "Manage feature flags.", + "name": "feature-flags" + }, + { + "description": "Manage feature flag targets.", + "name": "feature-flags.targets" + }, + { + "description": "Organize and manage user groups within organizations.", + "name": "groups" + }, + { + "description": "Multi-factor authentication factor management.", + "name": "multi-factor-auth" + }, + { + "description": "Multi-factor authentication challenge verification.", + "name": "multi-factor-auth.challenges" + }, + { + "description": "Manage organization domains.", + "name": "organization-domains" + }, + { + "description": "Manage organizations.", + "name": "organizations" + }, + { + "description": "Manage organization-scoped API keys.", + "name": "organizations.api_keys" + }, + { + "description": "Manage organization-scoped feature flags.", + "name": "organizations.feature-flags" + }, + { + "description": "Manage permissions.", + "name": "permissions" + }, + { + "description": "Data integration endpoints.", + "name": "pipes" + }, + { + "description": "Manage organization-scoped provider configurations.", + "name": "pipes.provider" + }, + { + "description": "Radar fraud detection.", + "name": "radar" + }, + { + "description": "Single Sign-On endpoints.", + "name": "sso" + }, + { + "description": "User authentication endpoints.", + "name": "user-management.authentication" + }, + { + "description": "Manage CORS origins for user management.", + "name": "user-management.cors-origins" + }, + { + "description": "Manage data providers.", + "name": "user-management.data-providers" + }, + { + "description": "Manage user invitations.", + "name": "user-management.invitations" + }, + { + "description": "Manage JWT templates.", + "name": "user-management.jwt-template" + }, + { + "description": "Magic auth endpoints.", + "name": "user-management.magic-auth" + }, + { + "description": "Multi-factor authentication endpoints.", + "name": "user-management.multi-factor-authentication" + }, + { + "description": "Manage user organization memberships.", + "name": "user-management.organization-membership" + }, + { + "description": "Manage groups for a user organization membership.", + "name": "user-management.organization-membership.groups" + }, + { + "description": "Manage redirect URIs.", + "name": "user-management.redirect-uris" + }, + { + "description": "Session token verification keys.", + "name": "user-management.session-tokens" + }, + { + "description": "Manage users.", + "name": "user-management.users" + }, + { + "description": "Manage authorized applications for users.", + "name": "user-management.users.authorized-applications" + }, + { + "description": "Manage user-scoped feature flags.", + "name": "user-management.users.feature-flags" + }, + { + "description": "Vault data encryption endpoints.", + "name": "vault" + }, + { + "description": "Manage webhooks.", + "name": "webhooks" + }, + { + "description": "Widget endpoints.", + "name": "widgets" + }, + { + "description": "A unified interface that simplifies authentication and authorization across customers, partners, and external SaaS tools.", + "name": "workos-connect" + } + ] +} diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..086fbda --- /dev/null +++ b/requirements.txt @@ -0,0 +1,7 @@ +# a2a-pack is installed by the platform base image. +deepagents>=0.5.0 +langchain>=0.3 +langchain-openai>=0.2 +langchain-core>=0.3 +langgraph>=0.6 +httpx>=0.27 diff --git a/skills/api-keys/SKILL.md b/skills/api-keys/SKILL.md new file mode 100644 index 0000000..21f78e3 --- /dev/null +++ b/skills/api-keys/SKILL.md @@ -0,0 +1,41 @@ +--- +name: api-keys-routes +description: Handle 3 OpenAPI operation(s) under /api_keys for the api keys route group. +--- + +# api keys API Routes + +Handle 3 OpenAPI operation(s) under /api_keys for the api keys route group. + +Use the generated operation tools to make real API calls. Do not invent API responses. +If a tool reports missing setup, return the exact setup field name to the caller. +For write, update, or delete operations, state the intended action before calling the tool. + +## Operations + +### api_keys_controller_validate_api_key + +- Operation ID: `api_keys_controller_validate_api_key` +- Route: `POST /api_keys/validations` +- Mode: WRITE +- Summary: Validate API key +- Body: JSON request body accepted. + +### api_keys_controller_delete + +- Operation ID: `api_keys_controller_delete` +- Route: `DELETE /api_keys/{id}` +- Mode: WRITE +- Summary: Delete an API key +- Parameters: + - `id` in `path` required + +### api_keys_controller_expire + +- Operation ID: `api_keys_controller_expire` +- Route: `POST /api_keys/{id}/expire` +- Mode: WRITE +- Summary: Expire an API key +- Parameters: + - `id` in `path` required +- Body: JSON request body accepted. diff --git a/skills/audit-logs/SKILL.md b/skills/audit-logs/SKILL.md new file mode 100644 index 0000000..895c9f4 --- /dev/null +++ b/skills/audit-logs/SKILL.md @@ -0,0 +1,76 @@ +--- +name: audit-logs-routes +description: Handle 6 OpenAPI operation(s) under /audit_logs for the audit logs route group. +--- + +# audit logs API Routes + +Handle 6 OpenAPI operation(s) under /audit_logs for the audit logs route group. + +Use the generated operation tools to make real API calls. Do not invent API responses. +If a tool reports missing setup, return the exact setup field name to the caller. +For write, update, or delete operations, state the intended action before calling the tool. + +## Operations + +### audit_log_validators_controller_list + +- Operation ID: `audit_log_validators_controller_list` +- Route: `GET /audit_logs/actions` +- Mode: READ +- Summary: List Actions +- Parameters: + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + +### audit_log_validator_versions_controller_create + +- Operation ID: `audit_log_validator_versions_controller_create` +- Route: `POST /audit_logs/actions/{actionName}/schemas` +- Mode: WRITE +- Summary: Create Schema +- Parameters: + - `actionName` in `path` required +- Body: JSON request body accepted. + +### audit_log_validator_versions_controller_schemas + +- Operation ID: `audit_log_validator_versions_controller_schemas` +- Route: `GET /audit_logs/actions/{actionName}/schemas` +- Mode: READ +- Summary: List Schemas +- Parameters: + - `actionName` in `path` required + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + +### audit_log_events_controller_create + +- Operation ID: `audit_log_events_controller_create` +- Route: `POST /audit_logs/events` +- Mode: WRITE +- Summary: Create Event +- Parameters: + - `idempotency-key` in `header` +- Body: JSON request body accepted. + +### audit_log_exports_controller_exports + +- Operation ID: `audit_log_exports_controller_exports` +- Route: `POST /audit_logs/exports` +- Mode: WRITE +- Summary: Create Export +- Body: JSON request body accepted. + +### audit_log_exports_controller_export + +- Operation ID: `audit_log_exports_controller_export` +- Route: `GET /audit_logs/exports/{auditLogExportId}` +- Mode: READ +- Summary: Get Export +- Parameters: + - `auditLogExportId` in `path` required diff --git a/skills/auth/SKILL.md b/skills/auth/SKILL.md new file mode 100644 index 0000000..b41e128 --- /dev/null +++ b/skills/auth/SKILL.md @@ -0,0 +1,60 @@ +--- +name: auth-routes +description: Handle 5 OpenAPI operation(s) under /auth for the auth route group. +--- + +# auth API Routes + +Handle 5 OpenAPI operation(s) under /auth for the auth route group. + +Use the generated operation tools to make real API calls. Do not invent API responses. +If a tool reports missing setup, return the exact setup field name to the caller. +For write, update, or delete operations, state the intended action before calling the tool. + +## Operations + +### authentication_challenges_controller_verify + +- Operation ID: `authentication_challenges_controller_verify` +- Route: `POST /auth/challenges/{id}/verify` +- Mode: WRITE +- Summary: Verify Challenge +- Parameters: + - `id` in `path` required +- Body: JSON request body accepted. + +### authentication_factors_controller_create + +- Operation ID: `authentication_factors_controller_create` +- Route: `POST /auth/factors/enroll` +- Mode: WRITE +- Summary: Enroll Factor +- Body: JSON request body accepted. + +### authentication_factors_controller_get + +- Operation ID: `authentication_factors_controller_get` +- Route: `GET /auth/factors/{id}` +- Mode: READ +- Summary: Get Factor +- Parameters: + - `id` in `path` required + +### authentication_factors_controller_delete + +- Operation ID: `authentication_factors_controller_delete` +- Route: `DELETE /auth/factors/{id}` +- Mode: WRITE +- Summary: Delete Factor +- Parameters: + - `id` in `path` required + +### authentication_factors_controller_challenge + +- Operation ID: `authentication_factors_controller_challenge` +- Route: `POST /auth/factors/{id}/challenge` +- Mode: WRITE +- Summary: Challenge Factor +- Parameters: + - `id` in `path` required +- Body: JSON request body accepted. diff --git a/skills/authkit/SKILL.md b/skills/authkit/SKILL.md new file mode 100644 index 0000000..220ca51 --- /dev/null +++ b/skills/authkit/SKILL.md @@ -0,0 +1,22 @@ +--- +name: authkit-routes +description: Handle 1 OpenAPI operation(s) under /authkit/oauth2/complete for the authkit route group. +--- + +# authkit API Routes + +Handle 1 OpenAPI operation(s) under /authkit/oauth2/complete for the authkit route group. + +Use the generated operation tools to make real API calls. Do not invent API responses. +If a tool reports missing setup, return the exact setup field name to the caller. +For write, update, or delete operations, state the intended action before calling the tool. + +## Operations + +### external_auth_controller_complete_login + +- Operation ID: `external_auth_controller_complete_login` +- Route: `POST /authkit/oauth2/complete` +- Mode: WRITE +- Summary: Complete external authentication +- Body: JSON request body accepted. diff --git a/skills/authorization/SKILL.md b/skills/authorization/SKILL.md new file mode 100644 index 0000000..d8b1c4f --- /dev/null +++ b/skills/authorization/SKILL.md @@ -0,0 +1,516 @@ +--- +name: authorization-routes +description: Handle 45 OpenAPI operation(s) under /authorization for the authorization route group. +--- + +# authorization API Routes + +Handle 45 OpenAPI operation(s) under /authorization for the authorization route group. + +Use the generated operation tools to make real API calls. Do not invent API responses. +If a tool reports missing setup, return the exact setup field name to the caller. +For write, update, or delete operations, state the intended action before calling the tool. + +## Operations + +### authorization_group_role_assignments_controller_list + +- Operation ID: `authorization_group_role_assignments_controller_list` +- Route: `GET /authorization/groups/{group_id}/role_assignments` +- Mode: READ +- Summary: List role assignments for a group +- Parameters: + - `group_id` in `path` required + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + +### authorization_group_role_assignments_controller_create + +- Operation ID: `authorization_group_role_assignments_controller_create` +- Route: `POST /authorization/groups/{group_id}/role_assignments` +- Mode: WRITE +- Summary: Assign a role to a group +- Parameters: + - `group_id` in `path` required +- Body: JSON request body accepted. + +### authorization_group_role_assignments_controller_replace_group_role_assignments + +- Operation ID: `authorization_group_role_assignments_controller_replace_group_role_assignments` +- Route: `PUT /authorization/groups/{group_id}/role_assignments` +- Mode: WRITE +- Summary: Replace all role assignments for a group +- Parameters: + - `group_id` in `path` required +- Body: JSON request body accepted. + +### authorization_group_role_assignments_controller_remove_group_role_assignments + +- Operation ID: `authorization_group_role_assignments_controller_remove_group_role_assignments` +- Route: `DELETE /authorization/groups/{group_id}/role_assignments` +- Mode: WRITE +- Summary: Remove group role assignments by criteria +- Parameters: + - `group_id` in `path` required +- Body: JSON request body accepted. + +### authorization_group_role_assignments_controller_get + +- Operation ID: `authorization_group_role_assignments_controller_get` +- Route: `GET /authorization/groups/{group_id}/role_assignments/{role_assignment_id}` +- Mode: READ +- Summary: Get a group role assignment +- Parameters: + - `group_id` in `path` required + - `role_assignment_id` in `path` required + +### authorization_group_role_assignments_controller_remove_group_role_assignment + +- Operation ID: `authorization_group_role_assignments_controller_remove_group_role_assignment` +- Route: `DELETE /authorization/groups/{group_id}/role_assignments/{role_assignment_id}` +- Mode: WRITE +- Summary: Remove a group role assignment +- Parameters: + - `group_id` in `path` required + - `role_assignment_id` in `path` required + +### authorization_controller_check + +- Operation ID: `authorization_controller_check` +- Route: `POST /authorization/organization_memberships/{organization_membership_id}/check` +- Mode: WRITE +- Summary: Check authorization +- Parameters: + - `organization_membership_id` in `path` required +- Body: JSON request body accepted. + +### authorization_controller_list_resources_for_membership + +- Operation ID: `authorization_controller_list_resources_for_membership` +- Route: `GET /authorization/organization_memberships/{organization_membership_id}/resources` +- Mode: READ +- Summary: List resources for organization membership +- Parameters: + - `organization_membership_id` in `path` required + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + - `permission_slug` in `query` required + - `parent_resource_id` in `query` + - `parent_resource_type_slug` in `query` + - `parent_resource_external_id` in `query` + +### authorization_controller_list_effective_permissions + +- Operation ID: `authorization_controller_list_effective_permissions` +- Route: `GET /authorization/organization_memberships/{organization_membership_id}/resources/{resource_id}/permissions` +- Mode: READ +- Summary: List effective permissions for an organization membership on a resource +- Parameters: + - `organization_membership_id` in `path` required + - `resource_id` in `path` required + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + +### authorization_controller_list_effective_permissions_by_external_id + +- Operation ID: `authorization_controller_list_effective_permissions_by_external_id` +- Route: `GET /authorization/organization_memberships/{organization_membership_id}/resources/{resource_type_slug}/{external_id}/permissions` +- Mode: READ +- Summary: List effective permissions for an organization membership on a resource by external ID +- Parameters: + - `organization_membership_id` in `path` required + - `resource_type_slug` in `path` required + - `external_id` in `path` required + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + +### authorization_role_assignments_controller_list_role_assignments + +- Operation ID: `authorization_role_assignments_controller_list_role_assignments` +- Route: `GET /authorization/organization_memberships/{organization_membership_id}/role_assignments` +- Mode: READ +- Summary: List role assignments +- Parameters: + - `organization_membership_id` in `path` required + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + - `resource_id` in `query` + - `resource_external_id` in `query` + - `resource_type_slug` in `query` + +### authorization_role_assignments_controller_assign_role + +- Operation ID: `authorization_role_assignments_controller_assign_role` +- Route: `POST /authorization/organization_memberships/{organization_membership_id}/role_assignments` +- Mode: WRITE +- Summary: Assign a role +- Parameters: + - `organization_membership_id` in `path` required +- Body: JSON request body accepted. + +### authorization_role_assignments_controller_remove_role_by_criteria + +- Operation ID: `authorization_role_assignments_controller_remove_role_by_criteria` +- Route: `DELETE /authorization/organization_memberships/{organization_membership_id}/role_assignments` +- Mode: WRITE +- Summary: Remove a role assignment +- Parameters: + - `organization_membership_id` in `path` required +- Body: JSON request body accepted. + +### authorization_role_assignments_controller_remove_role_by_id + +- Operation ID: `authorization_role_assignments_controller_remove_role_by_id` +- Route: `DELETE /authorization/organization_memberships/{organization_membership_id}/role_assignments/{role_assignment_id}` +- Mode: WRITE +- Summary: Remove a role assignment by ID +- Parameters: + - `organization_membership_id` in `path` required + - `role_assignment_id` in `path` required + +### authorization_organization_roles_controller_create + +- Operation ID: `authorization_organization_roles_controller_create` +- Route: `POST /authorization/organizations/{organizationId}/roles` +- Mode: WRITE +- Summary: Create a custom role +- Parameters: + - `organizationId` in `path` required +- Body: JSON request body accepted. + +### authorization_organization_roles_controller_list + +- Operation ID: `authorization_organization_roles_controller_list` +- Route: `GET /authorization/organizations/{organizationId}/roles` +- Mode: READ +- Summary: List custom roles +- Parameters: + - `organizationId` in `path` required + +### authorization_organization_roles_controller_get + +- Operation ID: `authorization_organization_roles_controller_get` +- Route: `GET /authorization/organizations/{organizationId}/roles/{slug}` +- Mode: READ +- Summary: Get a custom role +- Parameters: + - `organizationId` in `path` required + - `slug` in `path` required + +### authorization_organization_roles_controller_update + +- Operation ID: `authorization_organization_roles_controller_update` +- Route: `PATCH /authorization/organizations/{organizationId}/roles/{slug}` +- Mode: WRITE +- Summary: Update a custom role +- Parameters: + - `organizationId` in `path` required + - `slug` in `path` required +- Body: JSON request body accepted. + +### authorization_organization_roles_controller_delete + +- Operation ID: `authorization_organization_roles_controller_delete` +- Route: `DELETE /authorization/organizations/{organizationId}/roles/{slug}` +- Mode: WRITE +- Summary: Delete a custom role +- Parameters: + - `organizationId` in `path` required + - `slug` in `path` required + +### authorization_organization_role_permissions_controller_set_permissions + +- Operation ID: `authorization_organization_role_permissions_controller_set_permissions` +- Route: `PUT /authorization/organizations/{organizationId}/roles/{slug}/permissions` +- Mode: WRITE +- Summary: Set permissions for a custom role +- Parameters: + - `organizationId` in `path` required + - `slug` in `path` required +- Body: JSON request body accepted. + +### authorization_organization_role_permissions_controller_add_permission + +- Operation ID: `authorization_organization_role_permissions_controller_add_permission` +- Route: `POST /authorization/organizations/{organizationId}/roles/{slug}/permissions` +- Mode: WRITE +- Summary: Add a permission to a custom role +- Parameters: + - `organizationId` in `path` required + - `slug` in `path` required +- Body: JSON request body accepted. + +### authorization_organization_role_permissions_controller_remove_permission + +- Operation ID: `authorization_organization_role_permissions_controller_remove_permission` +- Route: `DELETE /authorization/organizations/{organizationId}/roles/{slug}/permissions/{permissionSlug}` +- Mode: WRITE +- Summary: Remove a permission from a custom role +- Parameters: + - `organizationId` in `path` required + - `slug` in `path` required + - `permissionSlug` in `path` required + +### authorization_resources_by_external_id_controller_get_by_external_id + +- Operation ID: `authorization_resources_by_external_id_controller_get_by_external_id` +- Route: `GET /authorization/organizations/{organization_id}/resources/{resource_type_slug}/{external_id}` +- Mode: READ +- Summary: Get a resource by external ID +- Parameters: + - `organization_id` in `path` required + - `resource_type_slug` in `path` required + - `external_id` in `path` required + +### authorization_resources_by_external_id_controller_update_by_external_id + +- Operation ID: `authorization_resources_by_external_id_controller_update_by_external_id` +- Route: `PATCH /authorization/organizations/{organization_id}/resources/{resource_type_slug}/{external_id}` +- Mode: WRITE +- Summary: Update a resource by external ID +- Parameters: + - `organization_id` in `path` required + - `resource_type_slug` in `path` required + - `external_id` in `path` required +- Body: JSON request body accepted. + +### authorization_resources_by_external_id_controller_delete_by_external_id + +- Operation ID: `authorization_resources_by_external_id_controller_delete_by_external_id` +- Route: `DELETE /authorization/organizations/{organization_id}/resources/{resource_type_slug}/{external_id}` +- Mode: WRITE +- Summary: Delete an authorization resource by external ID +- Parameters: + - `organization_id` in `path` required + - `resource_type_slug` in `path` required + - `external_id` in `path` required + - `cascade_delete` in `query` + +### authorization_resources_by_external_id_controller_list_organization_memberships_ + +- Operation ID: `authorization_resources_by_external_id_controller_list_organization_memberships_` +- Route: `GET /authorization/organizations/{organization_id}/resources/{resource_type_slug}/{external_id}/organization_memberships` +- Mode: READ +- Summary: List memberships for a resource by external ID +- Parameters: + - `organization_id` in `path` required + - `resource_type_slug` in `path` required + - `external_id` in `path` required + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + - `permission_slug` in `query` required + - `assignment` in `query` + +### authorization_role_assignments_controller_list_role_assignments_for_resource_by_ + +- Operation ID: `authorization_role_assignments_controller_list_role_assignments_for_resource_by_` +- Route: `GET /authorization/organizations/{organization_id}/resources/{resource_type_slug}/{external_id}/role_assignments` +- Mode: READ +- Summary: List role assignments for a resource by external ID +- Parameters: + - `organization_id` in `path` required + - `resource_type_slug` in `path` required + - `external_id` in `path` required + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + - `role_slug` in `query` + +### authorization_permissions_controller_list + +- Operation ID: `authorization_permissions_controller_list` +- Route: `GET /authorization/permissions` +- Mode: READ +- Summary: List permissions +- Parameters: + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + +### authorization_permissions_controller_create + +- Operation ID: `authorization_permissions_controller_create` +- Route: `POST /authorization/permissions` +- Mode: WRITE +- Summary: Create a permission +- Body: JSON request body accepted. + +### authorization_permissions_controller_find + +- Operation ID: `authorization_permissions_controller_find` +- Route: `GET /authorization/permissions/{slug}` +- Mode: READ +- Summary: Get a permission +- Parameters: + - `slug` in `path` required + +### authorization_permissions_controller_update + +- Operation ID: `authorization_permissions_controller_update` +- Route: `PATCH /authorization/permissions/{slug}` +- Mode: WRITE +- Summary: Update a permission +- Parameters: + - `slug` in `path` required +- Body: JSON request body accepted. + +### authorization_permissions_controller_delete + +- Operation ID: `authorization_permissions_controller_delete` +- Route: `DELETE /authorization/permissions/{slug}` +- Mode: WRITE +- Summary: Delete a permission +- Parameters: + - `slug` in `path` required + +### authorization_resources_controller_list + +- Operation ID: `authorization_resources_controller_list` +- Route: `GET /authorization/resources` +- Mode: READ +- Summary: List resources +- Parameters: + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + - `organization_id` in `query` + - `resource_type_slug` in `query` + - `resource_external_id` in `query` + - `parent_resource_id` in `query` + - `parent_resource_type_slug` in `query` + - `parent_external_id` in `query` + +### authorization_resources_controller_create + +- Operation ID: `authorization_resources_controller_create` +- Route: `POST /authorization/resources` +- Mode: WRITE +- Summary: Create an authorization resource +- Body: JSON request body accepted. + +### authorization_resources_controller_find_by_id + +- Operation ID: `authorization_resources_controller_find_by_id` +- Route: `GET /authorization/resources/{resource_id}` +- Mode: READ +- Summary: Get a resource +- Parameters: + - `resource_id` in `path` required + +### authorization_resources_controller_update + +- Operation ID: `authorization_resources_controller_update` +- Route: `PATCH /authorization/resources/{resource_id}` +- Mode: WRITE +- Summary: Update a resource +- Parameters: + - `resource_id` in `path` required +- Body: JSON request body accepted. + +### authorization_resources_controller_delete + +- Operation ID: `authorization_resources_controller_delete` +- Route: `DELETE /authorization/resources/{resource_id}` +- Mode: WRITE +- Summary: Delete an authorization resource +- Parameters: + - `resource_id` in `path` required + - `cascade_delete` in `query` + +### authorization_resources_controller_list_organization_memberships_for_resource + +- Operation ID: `authorization_resources_controller_list_organization_memberships_for_resource` +- Route: `GET /authorization/resources/{resource_id}/organization_memberships` +- Mode: READ +- Summary: List organization memberships for resource +- Parameters: + - `resource_id` in `path` required + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + - `permission_slug` in `query` required + - `assignment` in `query` + +### authorization_role_assignments_controller_list_role_assignments_for_resource + +- Operation ID: `authorization_role_assignments_controller_list_role_assignments_for_resource` +- Route: `GET /authorization/resources/{resource_id}/role_assignments` +- Mode: READ +- Summary: List role assignments for a resource +- Parameters: + - `resource_id` in `path` required + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + - `role_slug` in `query` + +### authorization_roles_controller_create + +- Operation ID: `authorization_roles_controller_create` +- Route: `POST /authorization/roles` +- Mode: WRITE +- Summary: Create an environment role +- Body: JSON request body accepted. + +### authorization_roles_controller_list + +- Operation ID: `authorization_roles_controller_list` +- Route: `GET /authorization/roles` +- Mode: READ +- Summary: List environment roles + +### authorization_roles_controller_get + +- Operation ID: `authorization_roles_controller_get` +- Route: `GET /authorization/roles/{slug}` +- Mode: READ +- Summary: Get an environment role +- Parameters: + - `slug` in `path` required + +### authorization_roles_controller_update + +- Operation ID: `authorization_roles_controller_update` +- Route: `PATCH /authorization/roles/{slug}` +- Mode: WRITE +- Summary: Update an environment role +- Parameters: + - `slug` in `path` required +- Body: JSON request body accepted. + +### authorization_role_permissions_controller_set_permissions + +- Operation ID: `authorization_role_permissions_controller_set_permissions` +- Route: `PUT /authorization/roles/{slug}/permissions` +- Mode: WRITE +- Summary: Set permissions for an environment role +- Parameters: + - `slug` in `path` required +- Body: JSON request body accepted. + +### authorization_role_permissions_controller_add_permission + +- Operation ID: `authorization_role_permissions_controller_add_permission` +- Route: `POST /authorization/roles/{slug}/permissions` +- Mode: WRITE +- Summary: Add a permission to an environment role +- Parameters: + - `slug` in `path` required +- Body: JSON request body accepted. diff --git a/skills/client/SKILL.md b/skills/client/SKILL.md new file mode 100644 index 0000000..84785ad --- /dev/null +++ b/skills/client/SKILL.md @@ -0,0 +1,22 @@ +--- +name: client-routes +description: Handle 1 OpenAPI operation(s) under /client/token for the client route group. +--- + +# client API Routes + +Handle 1 OpenAPI operation(s) under /client/token for the client route group. + +Use the generated operation tools to make real API calls. Do not invent API responses. +If a tool reports missing setup, return the exact setup field name to the caller. +For write, update, or delete operations, state the intended action before calling the tool. + +## Operations + +### client_api_token_controller_issue_client_api_token + +- Operation ID: `client_api_token_controller_issue_client_api_token` +- Route: `POST /client/token` +- Mode: WRITE +- Summary: Generate a Client API token +- Body: JSON request body accepted. diff --git a/skills/connect/SKILL.md b/skills/connect/SKILL.md new file mode 100644 index 0000000..537a765 --- /dev/null +++ b/skills/connect/SKILL.md @@ -0,0 +1,91 @@ +--- +name: connect-routes +description: Handle 8 OpenAPI operation(s) under /connect for the connect route group. +--- + +# connect API Routes + +Handle 8 OpenAPI operation(s) under /connect for the connect route group. + +Use the generated operation tools to make real API calls. Do not invent API responses. +If a tool reports missing setup, return the exact setup field name to the caller. +For write, update, or delete operations, state the intended action before calling the tool. + +## Operations + +### applications_controller_list + +- Operation ID: `applications_controller_list` +- Route: `GET /connect/applications` +- Mode: READ +- Summary: List Connect Applications +- Parameters: + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + - `organization_id` in `query` + +### applications_controller_create + +- Operation ID: `applications_controller_create` +- Route: `POST /connect/applications` +- Mode: WRITE +- Summary: Create a Connect Application +- Body: JSON request body accepted. + +### applications_controller_find + +- Operation ID: `applications_controller_find` +- Route: `GET /connect/applications/{id}` +- Mode: READ +- Summary: Get a Connect Application +- Parameters: + - `id` in `path` required + +### applications_controller_update + +- Operation ID: `applications_controller_update` +- Route: `PUT /connect/applications/{id}` +- Mode: WRITE +- Summary: Update a Connect Application +- Parameters: + - `id` in `path` required +- Body: JSON request body accepted. + +### applications_controller_delete + +- Operation ID: `applications_controller_delete` +- Route: `DELETE /connect/applications/{id}` +- Mode: WRITE +- Summary: Delete a Connect Application +- Parameters: + - `id` in `path` required + +### application_credentials_controller_list + +- Operation ID: `application_credentials_controller_list` +- Route: `GET /connect/applications/{id}/client_secrets` +- Mode: READ +- Summary: List Client Secrets for a Connect Application +- Parameters: + - `id` in `path` required + +### application_credentials_controller_create + +- Operation ID: `application_credentials_controller_create` +- Route: `POST /connect/applications/{id}/client_secrets` +- Mode: WRITE +- Summary: Create a new client secret for a Connect Application +- Parameters: + - `id` in `path` required +- Body: JSON request body accepted. + +### application_credentials_controller_delete + +- Operation ID: `application_credentials_controller_delete` +- Route: `DELETE /connect/client_secrets/{id}` +- Mode: WRITE +- Summary: Delete a Client Secret +- Parameters: + - `id` in `path` required diff --git a/skills/connections/SKILL.md b/skills/connections/SKILL.md new file mode 100644 index 0000000..d41ac9f --- /dev/null +++ b/skills/connections/SKILL.md @@ -0,0 +1,48 @@ +--- +name: connections-routes +description: Handle 3 OpenAPI operation(s) under /connections for the connections route group. +--- + +# connections API Routes + +Handle 3 OpenAPI operation(s) under /connections for the connections route group. + +Use the generated operation tools to make real API calls. Do not invent API responses. +If a tool reports missing setup, return the exact setup field name to the caller. +For write, update, or delete operations, state the intended action before calling the tool. + +## Operations + +### connections_controller_list + +- Operation ID: `connections_controller_list` +- Route: `GET /connections` +- Mode: READ +- Summary: List Connections +- Parameters: + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + - `connection_type` in `query` + - `domain` in `query` + - `organization_id` in `query` + - `search` in `query` + +### connections_controller_find + +- Operation ID: `connections_controller_find` +- Route: `GET /connections/{id}` +- Mode: READ +- Summary: Get a Connection +- Parameters: + - `id` in `path` required + +### connections_controller_delete + +- Operation ID: `connections_controller_delete` +- Route: `DELETE /connections/{id}` +- Mode: WRITE +- Summary: Delete a Connection +- Parameters: + - `id` in `path` required diff --git a/skills/data-integrations/SKILL.md b/skills/data-integrations/SKILL.md new file mode 100644 index 0000000..e8348e9 --- /dev/null +++ b/skills/data-integrations/SKILL.md @@ -0,0 +1,34 @@ +--- +name: data-integrations-routes +description: Handle 2 OpenAPI operation(s) under /data-integrations/{slug} for the data integrations route group. +--- + +# data integrations API Routes + +Handle 2 OpenAPI operation(s) under /data-integrations/{slug} for the data integrations route group. + +Use the generated operation tools to make real API calls. Do not invent API responses. +If a tool reports missing setup, return the exact setup field name to the caller. +For write, update, or delete operations, state the intended action before calling the tool. + +## Operations + +### data_integrations_controller_get_data_integration_authorize_url + +- Operation ID: `data_integrations_controller_get_data_integration_authorize_url` +- Route: `POST /data-integrations/{slug}/authorize` +- Mode: WRITE +- Summary: Get authorization URL +- Parameters: + - `slug` in `path` required +- Body: JSON request body accepted. + +### data_integrations_controller_get_userland_user_token + +- Operation ID: `data_integrations_controller_get_userland_user_token` +- Route: `POST /data-integrations/{slug}/token` +- Mode: WRITE +- Summary: Get an access token for a connected account +- Parameters: + - `slug` in `path` required +- Body: JSON request body accepted. diff --git a/skills/directories/SKILL.md b/skills/directories/SKILL.md new file mode 100644 index 0000000..63d3d0d --- /dev/null +++ b/skills/directories/SKILL.md @@ -0,0 +1,47 @@ +--- +name: directories-routes +description: Handle 3 OpenAPI operation(s) under /directories for the directories route group. +--- + +# directories API Routes + +Handle 3 OpenAPI operation(s) under /directories for the directories route group. + +Use the generated operation tools to make real API calls. Do not invent API responses. +If a tool reports missing setup, return the exact setup field name to the caller. +For write, update, or delete operations, state the intended action before calling the tool. + +## Operations + +### directories_controller_list + +- Operation ID: `directories_controller_list` +- Route: `GET /directories` +- Mode: READ +- Summary: List Directories +- Parameters: + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + - `organization_id` in `query` + - `search` in `query` + - `domain` in `query` + +### directories_controller_find + +- Operation ID: `directories_controller_find` +- Route: `GET /directories/{id}` +- Mode: READ +- Summary: Get a Directory +- Parameters: + - `id` in `path` required + +### directories_controller_delete_directory + +- Operation ID: `directories_controller_delete_directory` +- Route: `DELETE /directories/{id}` +- Mode: WRITE +- Summary: Delete a Directory +- Parameters: + - `id` in `path` required diff --git a/skills/directory-groups/SKILL.md b/skills/directory-groups/SKILL.md new file mode 100644 index 0000000..efcd2a6 --- /dev/null +++ b/skills/directory-groups/SKILL.md @@ -0,0 +1,37 @@ +--- +name: directory-groups-routes +description: Handle 2 OpenAPI operation(s) under /directory_groups for the directory groups route group. +--- + +# directory groups API Routes + +Handle 2 OpenAPI operation(s) under /directory_groups for the directory groups route group. + +Use the generated operation tools to make real API calls. Do not invent API responses. +If a tool reports missing setup, return the exact setup field name to the caller. +For write, update, or delete operations, state the intended action before calling the tool. + +## Operations + +### directory_groups_controller_list + +- Operation ID: `directory_groups_controller_list` +- Route: `GET /directory_groups` +- Mode: READ +- Summary: List Directory Groups +- Parameters: + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + - `directory` in `query` + - `user` in `query` + +### directory_groups_controller_find + +- Operation ID: `directory_groups_controller_find` +- Route: `GET /directory_groups/{id}` +- Mode: READ +- Summary: Get a Directory Group +- Parameters: + - `id` in `path` required diff --git a/skills/directory-users/SKILL.md b/skills/directory-users/SKILL.md new file mode 100644 index 0000000..a31bd3a --- /dev/null +++ b/skills/directory-users/SKILL.md @@ -0,0 +1,39 @@ +--- +name: directory-users-routes +description: Handle 2 OpenAPI operation(s) under /directory_users for the directory users route group. +--- + +# directory users API Routes + +Handle 2 OpenAPI operation(s) under /directory_users for the directory users route group. + +Use the generated operation tools to make real API calls. Do not invent API responses. +If a tool reports missing setup, return the exact setup field name to the caller. +For write, update, or delete operations, state the intended action before calling the tool. + +## Operations + +### directory_users_controller_list + +- Operation ID: `directory_users_controller_list` +- Route: `GET /directory_users` +- Mode: READ +- Summary: List Directory Users +- Parameters: + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + - `directory` in `query` + - `group` in `query` + - `idp_id` in `query` + - `email` in `query` + +### directory_users_controller_find + +- Operation ID: `directory_users_controller_find` +- Route: `GET /directory_users/{id}` +- Mode: READ +- Summary: Get a Directory User +- Parameters: + - `id` in `path` required diff --git a/skills/events/SKILL.md b/skills/events/SKILL.md new file mode 100644 index 0000000..d0bbb7e --- /dev/null +++ b/skills/events/SKILL.md @@ -0,0 +1,30 @@ +--- +name: events-routes +description: Handle 1 OpenAPI operation(s) under /events for the events route group. +--- + +# events API Routes + +Handle 1 OpenAPI operation(s) under /events for the events route group. + +Use the generated operation tools to make real API calls. Do not invent API responses. +If a tool reports missing setup, return the exact setup field name to the caller. +For write, update, or delete operations, state the intended action before calling the tool. + +## Operations + +### events_controller_list + +- Operation ID: `events_controller_list` +- Route: `GET /events` +- Mode: READ +- Summary: List events +- Parameters: + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + - `events` in `query` + - `range_start` in `query` + - `range_end` in `query` + - `organization_id` in `query` diff --git a/skills/feature-flags/SKILL.md b/skills/feature-flags/SKILL.md new file mode 100644 index 0000000..81230ab --- /dev/null +++ b/skills/feature-flags/SKILL.md @@ -0,0 +1,73 @@ +--- +name: feature-flags-routes +description: Handle 6 OpenAPI operation(s) under /feature-flags for the feature flags route group. +--- + +# feature flags API Routes + +Handle 6 OpenAPI operation(s) under /feature-flags for the feature flags route group. + +Use the generated operation tools to make real API calls. Do not invent API responses. +If a tool reports missing setup, return the exact setup field name to the caller. +For write, update, or delete operations, state the intended action before calling the tool. + +## Operations + +### feature_flags_controller_list + +- Operation ID: `feature_flags_controller_list` +- Route: `GET /feature-flags` +- Mode: READ +- Summary: List feature flags +- Parameters: + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + +### feature_flags_controller_find_by_slug + +- Operation ID: `feature_flags_controller_find_by_slug` +- Route: `GET /feature-flags/{slug}` +- Mode: READ +- Summary: Get a feature flag +- Parameters: + - `slug` in `path` required + +### feature_flags_controller_disable_flag + +- Operation ID: `feature_flags_controller_disable_flag` +- Route: `PUT /feature-flags/{slug}/disable` +- Mode: WRITE +- Summary: Disable a feature flag +- Parameters: + - `slug` in `path` required + +### feature_flags_controller_enable_flag + +- Operation ID: `feature_flags_controller_enable_flag` +- Route: `PUT /feature-flags/{slug}/enable` +- Mode: WRITE +- Summary: Enable a feature flag +- Parameters: + - `slug` in `path` required + +### flag_targets_controller_create_target + +- Operation ID: `flag_targets_controller_create_target` +- Route: `POST /feature-flags/{slug}/targets/{resourceId}` +- Mode: WRITE +- Summary: Add a feature flag target +- Parameters: + - `resourceId` in `path` required + - `slug` in `path` required + +### flag_targets_controller_delete_target + +- Operation ID: `flag_targets_controller_delete_target` +- Route: `DELETE /feature-flags/{slug}/targets/{resourceId}` +- Mode: WRITE +- Summary: Remove a feature flag target +- Parameters: + - `resourceId` in `path` required + - `slug` in `path` required diff --git a/skills/organization-domains/SKILL.md b/skills/organization-domains/SKILL.md new file mode 100644 index 0000000..3d48e88 --- /dev/null +++ b/skills/organization-domains/SKILL.md @@ -0,0 +1,49 @@ +--- +name: organization-domains-routes +description: Handle 4 OpenAPI operation(s) under /organization_domains for the organization domains route group. +--- + +# organization domains API Routes + +Handle 4 OpenAPI operation(s) under /organization_domains for the organization domains route group. + +Use the generated operation tools to make real API calls. Do not invent API responses. +If a tool reports missing setup, return the exact setup field name to the caller. +For write, update, or delete operations, state the intended action before calling the tool. + +## Operations + +### organization_domains_controller_create + +- Operation ID: `organization_domains_controller_create` +- Route: `POST /organization_domains` +- Mode: WRITE +- Summary: Create an Organization Domain +- Body: JSON request body accepted. + +### organization_domains_controller_get + +- Operation ID: `organization_domains_controller_get` +- Route: `GET /organization_domains/{id}` +- Mode: READ +- Summary: Get an Organization Domain +- Parameters: + - `id` in `path` required + +### organization_domains_controller_delete + +- Operation ID: `organization_domains_controller_delete` +- Route: `DELETE /organization_domains/{id}` +- Mode: WRITE +- Summary: Delete an Organization Domain +- Parameters: + - `id` in `path` required + +### organization_domains_controller_verify + +- Operation ID: `organization_domains_controller_verify` +- Route: `POST /organization_domains/{id}/verify` +- Mode: WRITE +- Summary: Verify an Organization Domain +- Parameters: + - `id` in `path` required diff --git a/skills/organizations/SKILL.md b/skills/organizations/SKILL.md new file mode 100644 index 0000000..8a2b3c2 --- /dev/null +++ b/skills/organizations/SKILL.md @@ -0,0 +1,247 @@ +--- +name: organizations-routes +description: Handle 22 OpenAPI operation(s) under /organizations for the organizations route group. +--- + +# organizations API Routes + +Handle 22 OpenAPI operation(s) under /organizations for the organizations route group. + +Use the generated operation tools to make real API calls. Do not invent API responses. +If a tool reports missing setup, return the exact setup field name to the caller. +For write, update, or delete operations, state the intended action before calling the tool. + +## Operations + +### organizations_controller_list + +- Operation ID: `organizations_controller_list` +- Route: `GET /organizations` +- Mode: READ +- Summary: List Organizations +- Parameters: + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + - `domains` in `query` + - `search` in `query` + +### organizations_controller_create + +- Operation ID: `organizations_controller_create` +- Route: `POST /organizations` +- Mode: WRITE +- Summary: Create an Organization +- Body: JSON request body accepted. + +### organizations_controller_get_by_external_id + +- Operation ID: `organizations_controller_get_by_external_id` +- Route: `GET /organizations/external_id/{external_id}` +- Mode: READ +- Summary: Get an Organization by External ID +- Parameters: + - `external_id` in `path` required + +### organizations_controller_find + +- Operation ID: `organizations_controller_find` +- Route: `GET /organizations/{id}` +- Mode: READ +- Summary: Get an Organization +- Parameters: + - `id` in `path` required + +### organizations_controller_update_organization + +- Operation ID: `organizations_controller_update_organization` +- Route: `PUT /organizations/{id}` +- Mode: WRITE +- Summary: Update an Organization +- Parameters: + - `id` in `path` required +- Body: JSON request body accepted. + +### organizations_controller_delete_organization + +- Operation ID: `organizations_controller_delete_organization` +- Route: `DELETE /organizations/{id}` +- Mode: WRITE +- Summary: Delete an Organization +- Parameters: + - `id` in `path` required + +### organizations_controller_get_audit_log_configuration + +- Operation ID: `organizations_controller_get_audit_log_configuration` +- Route: `GET /organizations/{id}/audit_log_configuration` +- Mode: READ +- Summary: Get Audit Log Configuration +- Parameters: + - `id` in `path` required + +### audit_logs_retention_controller_audit_logs_retention + +- Operation ID: `audit_logs_retention_controller_audit_logs_retention` +- Route: `GET /organizations/{id}/audit_logs_retention` +- Mode: READ +- Summary: Get Retention +- Parameters: + - `id` in `path` required + +### audit_logs_retention_controller_update_audit_logs_retention + +- Operation ID: `audit_logs_retention_controller_update_audit_logs_retention` +- Route: `PUT /organizations/{id}/audit_logs_retention` +- Mode: WRITE +- Summary: Set Retention +- Parameters: + - `id` in `path` required +- Body: JSON request body accepted. + +### organization_api_keys_controller_list + +- Operation ID: `organization_api_keys_controller_list` +- Route: `GET /organizations/{organizationId}/api_keys` +- Mode: READ +- Summary: List API keys for an organization +- Parameters: + - `organizationId` in `path` required + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + +### organization_api_keys_controller_create + +- Operation ID: `organization_api_keys_controller_create` +- Route: `POST /organizations/{organizationId}/api_keys` +- Mode: WRITE +- Summary: Create an API key for an organization +- Parameters: + - `organizationId` in `path` required +- Body: JSON request body accepted. + +### provider_controller_list_for_organization + +- Operation ID: `provider_controller_list_for_organization` +- Route: `GET /organizations/{organizationId}/data_integration_configurations` +- Mode: READ +- Summary: List providers for an organization +- Parameters: + - `organizationId` in `path` required + +### provider_controller_configure + +- Operation ID: `provider_controller_configure` +- Route: `PUT /organizations/{organizationId}/data_integration_configurations/{slug}` +- Mode: WRITE +- Summary: Configure a provider for an organization +- Parameters: + - `organizationId` in `path` required + - `slug` in `path` required +- Body: JSON request body accepted. + +### organization_feature_flags_controller_list + +- Operation ID: `organization_feature_flags_controller_list` +- Route: `GET /organizations/{organizationId}/feature-flags` +- Mode: READ +- Summary: List enabled feature flags for an organization +- Parameters: + - `organizationId` in `path` required + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + +### groups_controller_create + +- Operation ID: `groups_controller_create` +- Route: `POST /organizations/{organizationId}/groups` +- Mode: WRITE +- Summary: Create a group +- Parameters: + - `organizationId` in `path` required +- Body: JSON request body accepted. + +### groups_controller_list + +- Operation ID: `groups_controller_list` +- Route: `GET /organizations/{organizationId}/groups` +- Mode: READ +- Summary: List groups +- Parameters: + - `organizationId` in `path` required + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + +### groups_controller_get + +- Operation ID: `groups_controller_get` +- Route: `GET /organizations/{organizationId}/groups/{groupId}` +- Mode: READ +- Summary: Get a group +- Parameters: + - `organizationId` in `path` required + - `groupId` in `path` required + +### groups_controller_update + +- Operation ID: `groups_controller_update` +- Route: `PATCH /organizations/{organizationId}/groups/{groupId}` +- Mode: WRITE +- Summary: Update a group +- Parameters: + - `organizationId` in `path` required + - `groupId` in `path` required +- Body: JSON request body accepted. + +### groups_controller_delete + +- Operation ID: `groups_controller_delete` +- Route: `DELETE /organizations/{organizationId}/groups/{groupId}` +- Mode: WRITE +- Summary: Delete a group +- Parameters: + - `organizationId` in `path` required + - `groupId` in `path` required + +### group_memberships_controller_add_member + +- Operation ID: `group_memberships_controller_add_member` +- Route: `POST /organizations/{organizationId}/groups/{groupId}/organization-memberships` +- Mode: WRITE +- Summary: Add a member to a Group +- Parameters: + - `organizationId` in `path` required + - `groupId` in `path` required +- Body: JSON request body accepted. + +### group_memberships_controller_list_members + +- Operation ID: `group_memberships_controller_list_members` +- Route: `GET /organizations/{organizationId}/groups/{groupId}/organization-memberships` +- Mode: READ +- Summary: List Group members +- Parameters: + - `organizationId` in `path` required + - `groupId` in `path` required + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + +### group_memberships_controller_remove_member + +- Operation ID: `group_memberships_controller_remove_member` +- Route: `DELETE /organizations/{organizationId}/groups/{groupId}/organization-memberships/{omId}` +- Mode: WRITE +- Summary: Remove a member from a Group +- Parameters: + - `organizationId` in `path` required + - `groupId` in `path` required + - `omId` in `path` required diff --git a/skills/portal/SKILL.md b/skills/portal/SKILL.md new file mode 100644 index 0000000..a63e6a0 --- /dev/null +++ b/skills/portal/SKILL.md @@ -0,0 +1,22 @@ +--- +name: portal-routes +description: Handle 1 OpenAPI operation(s) under /portal/generate_link for the portal route group. +--- + +# portal API Routes + +Handle 1 OpenAPI operation(s) under /portal/generate_link for the portal route group. + +Use the generated operation tools to make real API calls. Do not invent API responses. +If a tool reports missing setup, return the exact setup field name to the caller. +For write, update, or delete operations, state the intended action before calling the tool. + +## Operations + +### portal_sessions_controller_create + +- Operation ID: `portal_sessions_controller_create` +- Route: `POST /portal/generate_link` +- Mode: WRITE +- Summary: Generate a Portal Link +- Body: JSON request body accepted. diff --git a/skills/radar/SKILL.md b/skills/radar/SKILL.md new file mode 100644 index 0000000..84fda8b --- /dev/null +++ b/skills/radar/SKILL.md @@ -0,0 +1,54 @@ +--- +name: radar-routes +description: Handle 4 OpenAPI operation(s) under /radar for the radar route group. +--- + +# radar API Routes + +Handle 4 OpenAPI operation(s) under /radar for the radar route group. + +Use the generated operation tools to make real API calls. Do not invent API responses. +If a tool reports missing setup, return the exact setup field name to the caller. +For write, update, or delete operations, state the intended action before calling the tool. + +## Operations + +### radar_standalone_controller_assess + +- Operation ID: `radar_standalone_controller_assess` +- Route: `POST /radar/attempts` +- Mode: WRITE +- Summary: Create an attempt +- Body: JSON request body accepted. + +### radar_standalone_controller_update_radar_attempt + +- Operation ID: `radar_standalone_controller_update_radar_attempt` +- Route: `PUT /radar/attempts/{id}` +- Mode: WRITE +- Summary: Update a Radar attempt +- Parameters: + - `id` in `path` required +- Body: JSON request body accepted. + +### radar_standalone_controller_update_radar_list + +- Operation ID: `radar_standalone_controller_update_radar_list` +- Route: `POST /radar/lists/{type}/{action}` +- Mode: WRITE +- Summary: Add an entry to a Radar list +- Parameters: + - `type` in `path` required + - `action` in `path` required +- Body: JSON request body accepted. + +### radar_standalone_controller_delete_radar_list_entry + +- Operation ID: `radar_standalone_controller_delete_radar_list_entry` +- Route: `DELETE /radar/lists/{type}/{action}` +- Mode: WRITE +- Summary: Remove an entry from a Radar list +- Parameters: + - `type` in `path` required + - `action` in `path` required +- Body: JSON request body accepted. diff --git a/skills/sso/SKILL.md b/skills/sso/SKILL.md new file mode 100644 index 0000000..5482144 --- /dev/null +++ b/skills/sso/SKILL.md @@ -0,0 +1,81 @@ +--- +name: sso-routes +description: Handle 6 OpenAPI operation(s) under /sso for the sso route group. +--- + +# sso API Routes + +Handle 6 OpenAPI operation(s) under /sso for the sso route group. + +Use the generated operation tools to make real API calls. Do not invent API responses. +If a tool reports missing setup, return the exact setup field name to the caller. +For write, update, or delete operations, state the intended action before calling the tool. + +## Operations + +### sso_controller_authorize + +- Operation ID: `sso_controller_authorize` +- Route: `GET /sso/authorize` +- Mode: READ +- Summary: Initiate SSO +- Parameters: + - `provider_scopes` in `query` + - `provider_query_params` in `query` + - `client_id` in `query` required + - `domain` in `query` + - `provider` in `query` + - `redirect_uri` in `query` required + - `response_type` in `query` required + - `state` in `query` + - `connection` in `query` + - `organization` in `query` + - `domain_hint` in `query` + - `login_hint` in `query` + - `nonce` in `query` + +### sso_controller_json_web_key_set + +- Operation ID: `sso_controller_json_web_key_set` +- Route: `GET /sso/jwks/{clientId}` +- Mode: READ +- Summary: Get JWKS +- Parameters: + - `clientId` in `path` required + +### sso_controller_logout + +- Operation ID: `sso_controller_logout` +- Route: `GET /sso/logout` +- Mode: READ +- Summary: Logout Redirect +- Parameters: + - `token` in `query` required + +### sso_controller_logout_authorize + +- Operation ID: `sso_controller_logout_authorize` +- Route: `POST /sso/logout/authorize` +- Mode: WRITE +- Summary: Logout Authorize +- Body: JSON request body accepted. + +### sso_controller_get_profile + +- Operation ID: `sso_controller_get_profile` +- Route: `GET /sso/profile` +- Mode: READ +- Summary: Get a User Profile + +### sso_controller_token + +- Operation ID: `sso_controller_token` +- Route: `POST /sso/token` +- Mode: WRITE +- Summary: Get a Profile and Token +- Parameters: + - `client_id` in `query` required + - `client_secret` in `query` required + - `code` in `query` required + - `grant_type` in `query` required +- Body: JSON request body accepted. diff --git a/skills/user-management/SKILL.md b/skills/user-management/SKILL.md new file mode 100644 index 0000000..60e4241 --- /dev/null +++ b/skills/user-management/SKILL.md @@ -0,0 +1,540 @@ +--- +name: user-management-routes +description: Handle 52 OpenAPI operation(s) under /user_management for the user management route group. +--- + +# user management API Routes + +Handle 52 OpenAPI operation(s) under /user_management for the user management route group. + +Use the generated operation tools to make real API calls. Do not invent API responses. +If a tool reports missing setup, return the exact setup field name to the caller. +For write, update, or delete operations, state the intended action before calling the tool. + +## Operations + +### userland_sessions_controller_authenticate_0 + +- Operation ID: `userland_sessions_controller_authenticate_0` +- Route: `POST /user_management/authenticate` +- Mode: WRITE +- Summary: Authenticate +- Body: JSON request body accepted. + +### userland_sso_controller_authorize + +- Operation ID: `userland_sso_controller_authorize` +- Route: `GET /user_management/authorize` +- Mode: READ +- Summary: Get an authorization URL +- Parameters: + - `code_challenge_method` in `query` + - `code_challenge` in `query` + - `domain_hint` in `query` + - `connection_id` in `query` + - `provider_query_params` in `query` + - `provider_scopes` in `query` + - `invitation_token` in `query` + - `screen_hint` in `query` + - `login_hint` in `query` + - `provider` in `query` + - `prompt` in `query` + - `state` in `query` + - `organization_id` in `query` + - `response_type` in `query` required + - `redirect_uri` in `query` required + - `client_id` in `query` required + +### userland_sso_controller_device_authorization + +- Operation ID: `userland_sso_controller_device_authorization` +- Route: `POST /user_management/authorize/device` +- Mode: WRITE +- Summary: Get device authorization URL +- Body: JSON request body accepted. + +### cors_origins_controller_create_cors_origin + +- Operation ID: `cors_origins_controller_create_cors_origin` +- Route: `POST /user_management/cors_origins` +- Mode: WRITE +- Summary: Create a CORS origin +- Body: JSON request body accepted. + +### userland_users_controller_get_email_verification + +- Operation ID: `userland_users_controller_get_email_verification` +- Route: `GET /user_management/email_verification/{id}` +- Mode: READ +- Summary: Get an email verification code +- Parameters: + - `id` in `path` required + +### userland_user_invites_controller_list + +- Operation ID: `userland_user_invites_controller_list` +- Route: `GET /user_management/invitations` +- Mode: READ +- Summary: List invitations +- Parameters: + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + - `organization_id` in `query` + - `email` in `query` + +### userland_user_invites_controller_create + +- Operation ID: `userland_user_invites_controller_create` +- Route: `POST /user_management/invitations` +- Mode: WRITE +- Summary: Send an invitation +- Body: JSON request body accepted. + +### userland_user_invites_controller_get_by_token + +- Operation ID: `userland_user_invites_controller_get_by_token` +- Route: `GET /user_management/invitations/by_token/{token}` +- Mode: READ +- Summary: Find an invitation by token +- Parameters: + - `token` in `path` required + +### userland_user_invites_controller_get + +- Operation ID: `userland_user_invites_controller_get` +- Route: `GET /user_management/invitations/{id}` +- Mode: READ +- Summary: Get an invitation +- Parameters: + - `id` in `path` required + +### userland_user_invites_controller_accept + +- Operation ID: `userland_user_invites_controller_accept` +- Route: `POST /user_management/invitations/{id}/accept` +- Mode: WRITE +- Summary: Accept an invitation +- Parameters: + - `id` in `path` required + +### userland_user_invites_controller_resend + +- Operation ID: `userland_user_invites_controller_resend` +- Route: `POST /user_management/invitations/{id}/resend` +- Mode: WRITE +- Summary: Resend an invitation +- Parameters: + - `id` in `path` required +- Body: JSON request body accepted. + +### userland_user_invites_controller_revoke + +- Operation ID: `userland_user_invites_controller_revoke` +- Route: `POST /user_management/invitations/{id}/revoke` +- Mode: WRITE +- Summary: Revoke an invitation +- Parameters: + - `id` in `path` required + +### jwt_templates_controller_get_jwt_template + +- Operation ID: `jwt_templates_controller_get_jwt_template` +- Route: `GET /user_management/jwt_template` +- Mode: READ +- Summary: Get JWT template + +### jwt_templates_controller_update_jwt_template + +- Operation ID: `jwt_templates_controller_update_jwt_template` +- Route: `PUT /user_management/jwt_template` +- Mode: WRITE +- Summary: Update JWT template +- Body: JSON request body accepted. + +### userland_magic_auth_controller_send_magic_auth_code_and_return + +- Operation ID: `userland_magic_auth_controller_send_magic_auth_code_and_return` +- Route: `POST /user_management/magic_auth` +- Mode: WRITE +- Summary: Create a Magic Auth code +- Body: JSON request body accepted. + +### userland_magic_auth_controller_get + +- Operation ID: `userland_magic_auth_controller_get` +- Route: `GET /user_management/magic_auth/{id}` +- Mode: READ +- Summary: Get Magic Auth code details +- Parameters: + - `id` in `path` required + +### userland_user_organization_memberships_controller_list + +- Operation ID: `userland_user_organization_memberships_controller_list` +- Route: `GET /user_management/organization_memberships` +- Mode: READ +- Summary: List organization memberships +- Parameters: + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + - `organization_id` in `query` + - `statuses` in `query` + - `user_id` in `query` + +### userland_user_organization_memberships_controller_create + +- Operation ID: `userland_user_organization_memberships_controller_create` +- Route: `POST /user_management/organization_memberships` +- Mode: WRITE +- Summary: Create an organization membership +- Body: JSON request body accepted. + +### userland_user_organization_memberships_controller_get + +- Operation ID: `userland_user_organization_memberships_controller_get` +- Route: `GET /user_management/organization_memberships/{id}` +- Mode: READ +- Summary: Get an organization membership +- Parameters: + - `id` in `path` required + +### userland_user_organization_memberships_controller_delete + +- Operation ID: `userland_user_organization_memberships_controller_delete` +- Route: `DELETE /user_management/organization_memberships/{id}` +- Mode: WRITE +- Summary: Delete an organization membership +- Parameters: + - `id` in `path` required + +### userland_user_organization_memberships_controller_update + +- Operation ID: `userland_user_organization_memberships_controller_update` +- Route: `PUT /user_management/organization_memberships/{id}` +- Mode: WRITE +- Summary: Update an organization membership +- Parameters: + - `id` in `path` required +- Body: JSON request body accepted. + +### userland_user_organization_memberships_controller_deactivate + +- Operation ID: `userland_user_organization_memberships_controller_deactivate` +- Route: `PUT /user_management/organization_memberships/{id}/deactivate` +- Mode: WRITE +- Summary: Deactivate an organization membership +- Parameters: + - `id` in `path` required + +### userland_user_organization_memberships_controller_reactivate + +- Operation ID: `userland_user_organization_memberships_controller_reactivate` +- Route: `PUT /user_management/organization_memberships/{id}/reactivate` +- Mode: WRITE +- Summary: Reactivate an organization membership +- Parameters: + - `id` in `path` required + +### organization_membership_groups_controller_list_groups + +- Operation ID: `organization_membership_groups_controller_list_groups` +- Route: `GET /user_management/organization_memberships/{omId}/groups` +- Mode: READ +- Summary: List groups +- Parameters: + - `omId` in `path` required + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + +### userland_users_controller_create_password_reset_token + +- Operation ID: `userland_users_controller_create_password_reset_token` +- Route: `POST /user_management/password_reset` +- Mode: WRITE +- Summary: Create a password reset token +- Body: JSON request body accepted. + +### userland_users_controller_reset_password_0 + +- Operation ID: `userland_users_controller_reset_password_0` +- Route: `POST /user_management/password_reset/confirm` +- Mode: WRITE +- Summary: Reset the password +- Body: JSON request body accepted. + +### userland_users_controller_get_password_reset + +- Operation ID: `userland_users_controller_get_password_reset` +- Route: `GET /user_management/password_reset/{id}` +- Mode: READ +- Summary: Get a password reset token +- Parameters: + - `id` in `path` required + +### redirect_uris_controller_create + +- Operation ID: `redirect_uris_controller_create` +- Route: `POST /user_management/redirect_uris` +- Mode: WRITE +- Summary: Create a redirect URI +- Body: JSON request body accepted. + +### userland_sessions_controller_logout + +- Operation ID: `userland_sessions_controller_logout` +- Route: `GET /user_management/sessions/logout` +- Mode: READ +- Summary: Logout +- Parameters: + - `session_id` in `query` required + - `return_to` in `query` + +### userland_sessions_controller_revoke_session + +- Operation ID: `userland_sessions_controller_revoke_session` +- Route: `POST /user_management/sessions/revoke` +- Mode: WRITE +- Summary: Revoke Session +- Body: JSON request body accepted. + +### userland_users_controller_list_0 + +- Operation ID: `userland_users_controller_list_0` +- Route: `GET /user_management/users` +- Mode: READ +- Summary: List users +- Parameters: + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + - `organization` in `query` + - `organization_id` in `query` + - `email` in `query` + +### userland_users_controller_create_0 + +- Operation ID: `userland_users_controller_create_0` +- Route: `POST /user_management/users` +- Mode: WRITE +- Summary: Create a user +- Body: JSON request body accepted. + +### userland_users_controller_get_by_external_id + +- Operation ID: `userland_users_controller_get_by_external_id` +- Route: `GET /user_management/users/external_id/{external_id}` +- Mode: READ +- Summary: Get a user by external ID +- Parameters: + - `external_id` in `path` required + +### userland_users_controller_update_0 + +- Operation ID: `userland_users_controller_update_0` +- Route: `PUT /user_management/users/{id}` +- Mode: WRITE +- Summary: Update a user +- Parameters: + - `id` in `path` required +- Body: JSON request body accepted. + +### userland_users_controller_get_0 + +- Operation ID: `userland_users_controller_get_0` +- Route: `GET /user_management/users/{id}` +- Mode: READ +- Summary: Get a user +- Parameters: + - `id` in `path` required + +### userland_users_controller_delete_0 + +- Operation ID: `userland_users_controller_delete_0` +- Route: `DELETE /user_management/users/{id}` +- Mode: WRITE +- Summary: Delete a user +- Parameters: + - `id` in `path` required + +### userland_users_controller_confirm_email_change + +- Operation ID: `userland_users_controller_confirm_email_change` +- Route: `POST /user_management/users/{id}/email_change/confirm` +- Mode: WRITE +- Summary: Confirm email change +- Parameters: + - `id` in `path` required +- Body: JSON request body accepted. + +### userland_users_controller_send_email_change + +- Operation ID: `userland_users_controller_send_email_change` +- Route: `POST /user_management/users/{id}/email_change/send` +- Mode: WRITE +- Summary: Send email change code +- Parameters: + - `id` in `path` required +- Body: JSON request body accepted. + +### userland_users_controller_email_verification_0 + +- Operation ID: `userland_users_controller_email_verification_0` +- Route: `POST /user_management/users/{id}/email_verification/confirm` +- Mode: WRITE +- Summary: Verify email +- Parameters: + - `id` in `path` required +- Body: JSON request body accepted. + +### userland_users_controller_send_verification_email_0 + +- Operation ID: `userland_users_controller_send_verification_email_0` +- Route: `POST /user_management/users/{id}/email_verification/send` +- Mode: WRITE +- Summary: Send verification email +- Parameters: + - `id` in `path` required + +### userland_user_identities_controller_get + +- Operation ID: `userland_user_identities_controller_get` +- Route: `GET /user_management/users/{id}/identities` +- Mode: READ +- Summary: Get user identities +- Parameters: + - `id` in `path` required + +### userland_user_sessions_controller_list + +- Operation ID: `userland_user_sessions_controller_list` +- Route: `GET /user_management/users/{id}/sessions` +- Mode: READ +- Summary: List sessions +- Parameters: + - `id` in `path` required + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + +### user_api_keys_controller_list + +- Operation ID: `user_api_keys_controller_list` +- Route: `GET /user_management/users/{userId}/api_keys` +- Mode: READ +- Summary: List API keys for a user +- Parameters: + - `userId` in `path` required + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + - `organization_id` in `query` + +### user_api_keys_controller_create + +- Operation ID: `user_api_keys_controller_create` +- Route: `POST /user_management/users/{userId}/api_keys` +- Mode: WRITE +- Summary: Create an API key for a user +- Parameters: + - `userId` in `path` required +- Body: JSON request body accepted. + +### userland_user_feature_flags_controller_list + +- Operation ID: `userland_user_feature_flags_controller_list` +- Route: `GET /user_management/users/{userId}/feature-flags` +- Mode: READ +- Summary: List enabled feature flags for a user +- Parameters: + - `userId` in `path` required + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + +### authorized_applications_controller_list + +- Operation ID: `authorized_applications_controller_list` +- Route: `GET /user_management/users/{user_id}/authorized_applications` +- Mode: READ +- Summary: List authorized applications +- Parameters: + - `user_id` in `path` required + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + +### authorized_applications_controller_delete + +- Operation ID: `authorized_applications_controller_delete` +- Route: `DELETE /user_management/users/{user_id}/authorized_applications/{application_id}` +- Mode: WRITE +- Summary: Delete an authorized application +- Parameters: + - `application_id` in `path` required + - `user_id` in `path` required + +### data_integrations_user_management_controller_get_user_data_installation + +- Operation ID: `data_integrations_user_management_controller_get_user_data_installation` +- Route: `GET /user_management/users/{user_id}/connected_accounts/{slug}` +- Mode: READ +- Summary: Get a connected account +- Parameters: + - `user_id` in `path` required + - `slug` in `path` required + - `organization_id` in `query` + +### data_integrations_user_management_controller_delete_user_data_installation + +- Operation ID: `data_integrations_user_management_controller_delete_user_data_installation` +- Route: `DELETE /user_management/users/{user_id}/connected_accounts/{slug}` +- Mode: WRITE +- Summary: Delete a connected account +- Parameters: + - `user_id` in `path` required + - `slug` in `path` required + - `organization_id` in `query` + +### data_integrations_user_management_controller_get_user_data_integrations + +- Operation ID: `data_integrations_user_management_controller_get_user_data_integrations` +- Route: `GET /user_management/users/{user_id}/data_providers` +- Mode: READ +- Summary: List providers for a user +- Parameters: + - `user_id` in `path` required + - `organization_id` in `query` + +### userland_user_authentication_factors_controller_create_0 + +- Operation ID: `userland_user_authentication_factors_controller_create_0` +- Route: `POST /user_management/users/{userlandUserId}/auth_factors` +- Mode: WRITE +- Summary: Enroll an authentication factor +- Parameters: + - `userlandUserId` in `path` required +- Body: JSON request body accepted. + +### userland_user_authentication_factors_controller_list_0 + +- Operation ID: `userland_user_authentication_factors_controller_list_0` +- Route: `GET /user_management/users/{userlandUserId}/auth_factors` +- Mode: READ +- Summary: List authentication factors +- Parameters: + - `userlandUserId` in `path` required + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` diff --git a/skills/vault/SKILL.md b/skills/vault/SKILL.md new file mode 100644 index 0000000..33b6b4d --- /dev/null +++ b/skills/vault/SKILL.md @@ -0,0 +1,116 @@ +--- +name: vault-routes +description: Handle 11 OpenAPI operation(s) under /vault/v1 for the vault route group. +--- + +# vault API Routes + +Handle 11 OpenAPI operation(s) under /vault/v1 for the vault route group. + +Use the generated operation tools to make real API calls. Do not invent API responses. +If a tool reports missing setup, return the exact setup field name to the caller. +For write, update, or delete operations, state the intended action before calling the tool. + +## Operations + +### jump_wire_web_key_controller_create_data_key + +- Operation ID: `jump_wire_web_key_controller_create_data_key` +- Route: `POST /vault/v1/keys/data-key` +- Mode: WRITE +- Summary: Create a data key +- Body: JSON request body accepted. + +### jump_wire_web_key_controller_decrypt + +- Operation ID: `jump_wire_web_key_controller_decrypt` +- Route: `POST /vault/v1/keys/decrypt` +- Mode: WRITE +- Summary: Decrypt a data key +- Body: JSON request body accepted. + +### jump_wire_web_key_controller_rekey + +- Operation ID: `jump_wire_web_key_controller_rekey` +- Route: `POST /vault/v1/keys/rekey` +- Mode: WRITE +- Summary: Re-encrypt a data key +- Body: JSON request body accepted. + +### jump_wire_web_data_vault_controller_index + +- Operation ID: `jump_wire_web_data_vault_controller_index` +- Route: `GET /vault/v1/kv` +- Mode: READ +- Summary: List objects +- Parameters: + - `limit` in `query` + - `before` in `query` + - `after` in `query` + - `order` in `query` + - `search` in `query` + - `updatedAfter` in `query` + +### jump_wire_web_data_vault_controller_create + +- Operation ID: `jump_wire_web_data_vault_controller_create` +- Route: `POST /vault/v1/kv` +- Mode: WRITE +- Summary: Create an object +- Body: JSON request body accepted. + +### jump_wire_web_data_vault_controller_show_by_name + +- Operation ID: `jump_wire_web_data_vault_controller_show_by_name` +- Route: `GET /vault/v1/kv/name/{name}` +- Mode: READ +- Summary: Read an object by name +- Parameters: + - `name` in `path` required + +### jump_wire_web_data_vault_controller_delete + +- Operation ID: `jump_wire_web_data_vault_controller_delete` +- Route: `DELETE /vault/v1/kv/{id}` +- Mode: WRITE +- Summary: Delete an object +- Parameters: + - `id` in `path` required + - `version_check` in `query` + +### jump_wire_web_data_vault_controller_show_by_id + +- Operation ID: `jump_wire_web_data_vault_controller_show_by_id` +- Route: `GET /vault/v1/kv/{id}` +- Mode: READ +- Summary: Read an object by ID +- Parameters: + - `id` in `path` required + +### jump_wire_web_data_vault_controller_update + +- Operation ID: `jump_wire_web_data_vault_controller_update` +- Route: `PUT /vault/v1/kv/{id}` +- Mode: WRITE +- Summary: Update an object +- Parameters: + - `id` in `path` required +- Body: JSON request body accepted. + +### jump_wire_web_data_vault_controller_describe + +- Operation ID: `jump_wire_web_data_vault_controller_describe` +- Route: `GET /vault/v1/kv/{id}/metadata` +- Mode: READ +- Summary: Describe an object +- Parameters: + - `id` in `path` required + +### jump_wire_web_data_vault_controller_versions + +- Operation ID: `jump_wire_web_data_vault_controller_versions` +- Route: `GET /vault/v1/kv/{id}/versions` +- Mode: READ +- Summary: List object versions +- Parameters: + - `id` in `path` required diff --git a/skills/webhook-endpoints/SKILL.md b/skills/webhook-endpoints/SKILL.md new file mode 100644 index 0000000..655819f --- /dev/null +++ b/skills/webhook-endpoints/SKILL.md @@ -0,0 +1,53 @@ +--- +name: webhook-endpoints-routes +description: Handle 4 OpenAPI operation(s) under /webhook_endpoints for the webhook endpoints route group. +--- + +# webhook endpoints API Routes + +Handle 4 OpenAPI operation(s) under /webhook_endpoints for the webhook endpoints route group. + +Use the generated operation tools to make real API calls. Do not invent API responses. +If a tool reports missing setup, return the exact setup field name to the caller. +For write, update, or delete operations, state the intended action before calling the tool. + +## Operations + +### webhook_endpoints_controller_list + +- Operation ID: `webhook_endpoints_controller_list` +- Route: `GET /webhook_endpoints` +- Mode: READ +- Summary: List Webhook Endpoints +- Parameters: + - `before` in `query` + - `after` in `query` + - `limit` in `query` + - `order` in `query` + +### webhook_endpoints_controller_create + +- Operation ID: `webhook_endpoints_controller_create` +- Route: `POST /webhook_endpoints` +- Mode: WRITE +- Summary: Create a Webhook Endpoint +- Body: JSON request body accepted. + +### webhook_endpoints_controller_update + +- Operation ID: `webhook_endpoints_controller_update` +- Route: `PATCH /webhook_endpoints/{id}` +- Mode: WRITE +- Summary: Update a Webhook Endpoint +- Parameters: + - `id` in `path` required +- Body: JSON request body accepted. + +### webhook_endpoints_controller_delete + +- Operation ID: `webhook_endpoints_controller_delete` +- Route: `DELETE /webhook_endpoints/{id}` +- Mode: WRITE +- Summary: Delete a Webhook Endpoint +- Parameters: + - `id` in `path` required diff --git a/skills/widgets/SKILL.md b/skills/widgets/SKILL.md new file mode 100644 index 0000000..25be716 --- /dev/null +++ b/skills/widgets/SKILL.md @@ -0,0 +1,22 @@ +--- +name: widgets-routes +description: Handle 1 OpenAPI operation(s) under /widgets/token for the widgets route group. +--- + +# widgets API Routes + +Handle 1 OpenAPI operation(s) under /widgets/token for the widgets route group. + +Use the generated operation tools to make real API calls. Do not invent API responses. +If a tool reports missing setup, return the exact setup field name to the caller. +For write, update, or delete operations, state the intended action before calling the tool. + +## Operations + +### widgets_public_controller_issue_widget_session_token + +- Operation ID: `widgets_public_controller_issue_widget_session_token` +- Route: `POST /widgets/token` +- Mode: WRITE +- Summary: Generate a widget token +- Body: JSON request body accepted.