Clerk Backend API

Authentication and user management for developers

clerk.com/docs ↗
Version
v1
OpenAPI
3.0.3
Endpoints
109
Schemas
112
81
Quality
Updated
3 days ago
Identity identity authentication user-management
Use this API in your AI agent

Query structured spec data via REST or MCP. Get exactly what your agent needs.

Get API Key

Server URLs

https://api.clerk.com/v1

Endpoints

Clear filters

Betafeatures 1 endpoints

PATCH /beta_features/instance_settings

Updates the settings of an instance

operationId: BetaFeatures_updateInstanceSettings

Request Body

application/json
schema BetaFeaturesUpdateInstanceSettingsRequest
Property Type Required
test_mode boolean optional
from_email_address string optional
progressive_sign_up boolean optional
session_token_template string optional
restricted_to_allowlist boolean optional
enhanced_email_deliverability boolean optional

Responses

200

InstanceSettings Server API

402

Payment required

422

Invalid request parameters

PATCH /beta_features/instance_settings

Domains 1 endpoints

PATCH /domains/{domain_id}

The proxy_url can be updated only for production instances.
Update one of the instance’s domains. Both primary and satellite domains can be updated.
If you choose to use Clerk via proxy, use this endpoint to specify the proxy_url.
Whenever you decide you’d rather switch to DNS setup for Clerk, simply set proxy_url
to null for the domain. When you update a production instance’s primary domain name,
you have to make sure that you’ve completed all the necessary setup steps for DNS and
emails to work. Expect downtime otherwise. Updating a primary domain’s name will also
update the instance’s home origin, affecting the default application paths.

operationId: Domains_updateDomain

Parameters

Name In Required Type Description
domain_id path required string

The ID of the domain that will be updated.

Request Body

required
application/json
schema DomainsUpdateDomainRequest
Property Type Required
name string optional
proxy_url string optional

Responses

200

A domain

400

Request was not successful

404

Resource not found

422

Invalid request parameters

PATCH /domains/{domain_id}

Emailaddresses 1 endpoints

PATCH /email_addresses/{email_address_id}

Updates an email address.

operationId: EmailAddresses_updateAddress

Parameters

Name In Required Type Description
email_address_id path required string

The ID of the email address to update

Request Body

application/json
schema EmailAddressesUpdateAddressRequest
Property Type Required
primary boolean optional
verified boolean optional

Responses

200

Success

400

Request was not successful

401

Authentication invalid

403

Authorization invalid

404

Resource not found

PATCH /email_addresses/{email_address_id}

Instancesettings 3 endpoints

PATCH /instance

Updates the settings of an instance

operationId: InstanceSettings_updateInstanceSettings

Request Body

application/json
schema InstanceSettingsUpdateInstanceSettingsRequest
Property Type Required
hibp boolean optional
test_mode boolean optional
support_email string optional
cookieless_dev boolean optional
allowed_origins array optional
clerk_js_version string optional
development_origin string optional
url_based_session_syncing boolean optional
enhanced_email_deliverability boolean optional

Responses

204

Accepted

422

Invalid request parameters

PATCH /instance
PATCH /instance/organization_settings

Updates the organization settings of the instance

operationId: InstanceSettings_updateOrganizationSettings

Request Body

application/json
schema InstanceSettingsUpdateOrganizationSettingsRequest
Property Type Required
enabled boolean optional
creator_role_id string optional
domains_enabled boolean optional
admin_delete_enabled boolean optional
domains_default_role_id string optional
max_allowed_memberships integer optional
domains_enrollment_modes array optional

Responses

200

Success

402

Payment required

404

Resource not found

422

Invalid request parameters

PATCH /instance/organization_settings
PATCH /instance/restrictions

Updates the restriction settings of an instance

operationId: InstanceSettings_updateRestrictions

Request Body

application/json
schema InstanceSettingsUpdateRestrictionsRequest
Property Type Required
allowlist boolean optional
blocklist boolean optional
block_email_subaddresses boolean optional
block_disposable_email_domains boolean optional

Responses

200

Success

402

Payment required

PATCH /instance/restrictions

Jwttemplates 1 endpoints

PATCH /jwt_templates/{template_id}

Updates an existing JWT template

operationId: JwtTemplates_updateTemplateById

Parameters

Name In Required Type Description
template_id path required string

The ID of the JWT template to update

Request Body

application/json
schema JwtTemplatesUpdateTemplateByIdRequest
Property Type Required
name string optional
claims object optional
lifetime number optional
signing_key string optional
signing_algorithm string optional
allowed_clock_skew number optional
custom_signing_key boolean optional

Responses

200

Success

400

Request was not successful

402

Payment required

422

Invalid request parameters

PATCH /jwt_templates/{template_id}

Oauthapplications 1 endpoints

PATCH /oauth_applications/{oauth_application_id}

Updates an existing OAuth application

operationId: OAuthApplications_updateApplication

Parameters

Name In Required Type Description
oauth_application_id path required string

The ID of the OAuth application to update

Request Body

required
application/json
schema OAuthApplicationsUpdateApplicationRequest
Property Type Required
name string optional
scopes string optional
callback_url string optional

Responses

200

An OAuth application

403

Authorization invalid

404

Resource not found

422

Invalid request parameters

PATCH /oauth_applications/{oauth_application_id}

Organizationmemberships 2 endpoints

PATCH /organizations/{organization_id}/memberships/{user_id}

Updates the properties of an existing organization membership

operationId: OrganizationMemberships_updateMembershipProperties

Parameters

Name In Required Type Description
organization_id path required string

The ID of the organization the membership belongs to

user_id path required string

The ID of the user that this membership belongs to

Request Body

required
application/json
schema OrganizationMembershipsUpdateMembershipPropertiesRequest
Property Type Required
role string required

Responses

200

Success

400

Request was not successful

404

Resource not found

422

Invalid request parameters

PATCH /organizations/{organization_id}/memberships/{user_id}
PATCH /organizations/{organization_id}/memberships/{user_id}/metadata

Update an organization membership’s metadata attributes by merging existing values with the provided parameters.
Metadata values will be updated via a deep merge. Deep means that any nested JSON objects will be merged as well.
You can remove metadata keys at any level by setting their value to null.

operationId: OrganizationMemberships_updateMembershipMetadata

Parameters

Name In Required Type Description
organization_id path required string

The ID of the organization the membership belongs to

user_id path required string

The ID of the user that this membership belongs to

Request Body

required
application/json
schema OrganizationMembershipsUpdateMembershipMetadataRequest
Property Type Required
public_metadata object optional
private_metadata object optional

Responses

200

Success

400

Request was not successful

404

Resource not found

422

Invalid request parameters

PATCH /organizations/{organization_id}/memberships/{user_id}/metadata

Organizations 2 endpoints

PATCH /organizations/{organization_id}

Updates an existing organization

operationId: Organizations_updateOrganization

Parameters

Name In Required Type Description
organization_id path required string

The ID of the organization to update

Request Body

required
application/json
schema OrganizationsUpdateOrganizationRequest
Property Type Required
name string optional
slug string optional
public_metadata object optional
private_metadata object optional
admin_delete_enabled boolean optional
max_allowed_memberships integer optional

Responses

200

An organization

402

Resource not found

404

Resource not found

422

Invalid request parameters

PATCH /organizations/{organization_id}
PATCH /organizations/{organization_id}/metadata

Update organization metadata attributes by merging existing values with the provided parameters.
Metadata values will be updated via a deep merge.
Deep meaning that any nested JSON objects will be merged as well.
You can remove metadata keys at any level by setting their value to null.

operationId: Organizations_mergeOrganizationMetadata

Parameters

Name In Required Type Description
organization_id path required string

The ID of the organization for which metadata will be merged or updated

Request Body

required
application/json
schema OrganizationsMergeOrganizationMetadataRequest
Property Type Required
public_metadata object optional
private_metadata object optional

Responses

200

An organization

400

Request was not successful

401

Authentication invalid

404

Resource not found

422

Invalid request parameters

PATCH /organizations/{organization_id}/metadata

Phonenumbers 1 endpoints

PATCH /phone_numbers/{phone_number_id}

Updates a phone number

operationId: PhoneNumbers_updateDetails

Parameters

Name In Required Type Description
phone_number_id path required string

The ID of the phone number to update

Request Body

application/json
schema PhoneNumbersUpdateDetailsRequest
Property Type Required
primary boolean optional
verified boolean optional
reserved_for_second_factor boolean optional

Responses

200

Success

400

Request was not successful

401

Authentication invalid

403

Authorization invalid

404

Resource not found

PATCH /phone_numbers/{phone_number_id}

Samlconnections 1 endpoints

PATCH /saml_connections/{saml_connection_id}

Updates the SAML Connection whose ID matches the provided id in the path.

operationId: SamlConnectionsBeta_updateConnectionById

Parameters

Name In Required Type Description
saml_connection_id path required string

The ID of the SAML Connection to update

Request Body

required
application/json
schema SamlConnectionsBetaUpdateConnectionByIdRequest
Property Type Required
name string optional
active boolean optional
domain string optional
idp_sso_url string optional
idp_metadata string optional
idp_entity_id string optional
idp_certificate string optional
allow_subdomains boolean optional
idp_metadata_url string optional
attribute_mapping object optional
user_id string optional
last_name string optional
first_name string optional
email_address string optional
allow_idp_initiated boolean optional
sync_user_attributes boolean optional

Responses

200

A SAML Connection

402

Payment required

403

Authorization invalid

404

Resource not found

422

Invalid request parameters

PATCH /saml_connections/{saml_connection_id}

Signups 1 endpoints

PATCH /sign_ups/{id}

Update the sign-up with the given ID

operationId: Signups_updateSignUpById

Parameters

Name In Required Type Description
id path required string

The ID of the sign-up to update

Request Body

application/json
schema SignupsUpdateSignUpByIdRequest
Property Type Required
external_id string optional
custom_action boolean optional

Responses

200

Success

403

Authorization invalid

PATCH /sign_ups/{id}

Users 2 endpoints

PATCH /users/{user_id}

Update a user’s attributes.

You can set the user’s primary contact identifiers (email address and phone numbers) by updating the primary_email_address_id and primary_phone_number_id attributes respectively.
Both IDs should correspond to verified identifications that belong to the user.

You can remove a user’s username by setting the username attribute to null or the blank string “”.
This is a destructive action; the identification will be deleted forever.
Usernames can be removed only if they are optional in your instance settings and there’s at least one other identifier which can be used for authentication.

This endpoint allows changing a user’s password. When passing the password parameter directly you have two further options.
You can ignore the password policy checks for your instance by setting the skip_password_checks parameter to true.
You can also choose to sign the user out of all their active sessions on any device once the password is updated. Just set sign_out_of_other_sessions to true.

operationId: Users_updateUserAttributes

Parameters

Name In Required Type Description
user_id path required string

The ID of the user to update

Request Body

required
application/json
schema UsersUpdateUserAttributesRequest
Property Type Required
password string optional
username string optional
last_name string optional
created_at string optional
first_name string optional
external_id string optional
totp_secret string optional
backup_codes array optional
password_digest string optional
password_hasher string optional
public_metadata object optional
unsafe_metadata object optional
private_metadata object optional
profile_image_id string optional
delete_self_enabled boolean optional
skip_password_checks boolean optional
primary_web3_wallet_id string optional
primary_phone_number_id string optional
primary_email_address_id string optional
sign_out_of_other_sessions boolean optional
…2 more object optional

Responses

200

Success

400

Request was not successful

401

Authentication invalid

404

Resource not found

422

Invalid request parameters

PATCH /users/{user_id}
PATCH /users/{user_id}/metadata

Update a user’s metadata attributes by merging existing values with the provided parameters.

This endpoint behaves differently than the Update a user endpoint.
Metadata values will not be replaced entirely.
Instead, a deep merge will be performed.
Deep means that any nested JSON objects will be merged as well.

You can remove metadata keys at any level by setting their value to null.

operationId: Users_mergeUserMetadataAttributes

Parameters

Name In Required Type Description
user_id path required string

The ID of the user whose metadata will be updated and merged

Request Body

application/json
schema UsersMergeUserMetadataAttributesRequest
Property Type Required
public_metadata object optional
unsafe_metadata object optional
private_metadata object optional

Responses

200

Success

400

Request was not successful

401

Authentication invalid

404

Resource not found

422

Invalid request parameters

PATCH /users/{user_id}/metadata

Schemas

object ActorToken
{
  "type": "object",
  "required": [
    "object",
    "id",
    "user_id",
    "actor",
    "status",
    "created_at",
    "updated_at"
  ],
  "properties": {
    "id": {
      "type": "string"
    },
    "url": {
      "type": "string",
      "nullable": true
    },
    "actor": {
      "type": "object"
    },
    "token": {
      "type": "string",
      "nullable": true
    },
    "object": {
      "enum": [
        "actor_token"
      ],
      "type": "string"
    },
    "status": {
      "enum": [
        "pending",
        "accepted",
        "revoked"
      ],
      "type": "string"
    },
    "user_id": {
      "type": "string"
    },
    "created_at": {
      "type": "integer",
      "format": "int64",
      "description": "Unix timestamp of creation.\n"
    },
    "updated_at": {
      "type": "integer",
      "format": "int64",
      "description": "Unix timestamp of last update.\n"
    }
  }
}
object ActorTokensCreateTokenRequest
{
  "type": "object",
  "required": [
    "user_id",
    "actor"
  ],
  "properties": {
    "actor": {
      "type": "object",
      "example": {
        "sub": "user_2OEpKhcCN1Lat9NQ0G6puh7q5Rb"
      },
      "description": "The actor payload. It needs to include a sub property which should contain the ID of the actor.\nThis whole payload will be also included in the JWT session token."
    },
    "user_id": {
      "type": "string",
      "description": "The ID of the user that can use the newly created sign in token."
    },
    "expires_in_seconds": {
      "type": "integer",
      "default": 3600,
      "description": "Optional parameter to specify the life duration of the actor token in seconds.\nBy default, the duration is 1 hour."
    },
    "session_max_duration_in_seconds": {
      "type": "integer",
      "default": 1800,
      "description": "The maximum duration that the session which will be created by the generated actor token should last.\nBy default, the duration of a session created via an actor token, lasts 30 minutes."
    }
  }
}
object Admin
{
  "type": "object",
  "required": [
    "status",
    "strategy"
  ],
  "properties": {
    "status": {
      "enum": [
        "verified"
      ],
      "type": "string"
    },
    "attempts": {
      "type": "integer",
      "nullable": true
    },
    "strategy": {
      "enum": [
        "admin"
      ],
      "type": "string"
    },
    "expire_at": {
      "type": "integer",
      "nullable": true
    }
  }
}
object AllowlistBlocklistAddIdentifierRequest
{
  "type": "object",
  "required": [
    "identifier"
  ],
  "properties": {
    "identifier": {
      "type": "string",
      "description": "The identifier to be added in the block-list.\nThis can be an email address, a phone number or a web3 wallet."
    }
  }
}
object AllowlistBlocklistAddIdentifierToAllowListRequest
{
  "type": "object",
  "required": [
    "identifier"
  ],
  "properties": {
    "notify": {
      "type": "boolean",
      "default": false,
      "description": "This flag denotes whether the given identifier will receive an invitation to join the application.\nNote that this only works for email address and phone number identifiers."
    },
    "identifier": {
      "type": "string",
      "description": "The identifier to be added in the allow-list.\nThis can be an email address, a phone number or a web3 wallet."
    }
  }
}
array AllowlistBlocklistListAllowedIdentifiersResponse
{
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/AllowlistIdentifier"
  }
}
object AllowlistIdentifier
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "object": {
      "enum": [
        "allowlist_identifier"
      ],
      "type": "string",
      "description": "String representing the object's type. Objects of the same type share the same value.\n"
    },
    "created_at": {
      "type": "integer",
      "format": "int64",
      "description": "Unix timestamp of creation\n"
    },
    "identifier": {
      "type": "string",
      "description": "An email address or a phone number.\n"
    },
    "updated_at": {
      "type": "integer",
      "format": "int64",
      "description": "Unix timestamp of last update.\n"
    },
    "instance_id": {
      "type": "string"
    },
    "invitation_id": {
      "type": "string"
    },
    "identifier_type": {
      "enum": [
        "email_address",
        "phone_number",
        "web3_wallet"
      ],
      "type": "string"
    }
  }
}
object BetaFeaturesUpdateInstanceDomainRequest
{
  "type": "object",
  "properties": {
    "home_url": {
      "type": "string",
      "description": "The new home URL of the production instance e.g. https://www.example.com"
    }
  }
}
object BetaFeaturesUpdateInstanceSettingsRequest
{
  "type": "object",
  "properties": {
    "test_mode": {
      "type": "boolean",
      "nullable": true,
      "description": "Toggles test mode for this instance, allowing the use of test email addresses and phone numbers.\nDefaults to true for development instances."
    },
    "from_email_address": {
      "type": "string",
      "nullable": true,
      "description": "The local part of the email address from which authentication-related emails (e.g. OTP code, magic links) will be sent.\nOnly alphanumeric values are allowed.\nNote that this value should contain only the local part of the address (e.g. `foo` for `foo@example.com`)."
    },
    "progressive_sign_up": {
      "type": "boolean",
      "nullable": true,
      "description": "Enable the Progressive Sign Up algorithm. Refer to the [docs](https://clerk.com/docs/upgrade-guides/progressive-sign-up) for more info."
    },
    "session_token_template": {
      "type": "string",
      "nullable": true,
      "description": "The name of the JWT Template used to augment your session tokens. To disable this, pass an empty string."
    },
    "restricted_to_allowlist": {
      "type": "boolean",
      "default": false,
      "nullable": true,
      "description": "Whether sign up is restricted to email addresses, phone numbers and usernames that are on the allowlist."
    },
    "enhanced_email_deliverability": {
      "type": "boolean",
      "nullable": true,
      "description": "The \"enhanced_email_deliverability\" feature will send emails from \"verifications@clerk.dev\" instead of your domain.\nThis can be helpful if you do not have a high domain reputation."
    }
  }
}
object BetaFeaturesUpdateInstanceSettingsResponse
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "object": {
      "enum": [
        "instance_settings"
      ],
      "type": "string",
      "description": "String representing the object's type. Objects of the same type share the same value."
    },
    "from_email_address": {
      "type": "string"
    },
    "progressive_sign_up": {
      "type": "boolean"
    },
    "restricted_to_allowlist": {
      "type": "boolean"
    },
    "enhanced_email_deliverability": {
      "type": "boolean"
    }
  }
}
object BetaFeaturesUpdateProductionInstanceDomainRequest
{
  "type": "object",
  "properties": {
    "home_url": {
      "type": "string",
      "description": "The new home URL of the production instance e.g. https://www.example.com"
    }
  }
}
object BlocklistIdentifier
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "object": {
      "enum": [
        "blocklist_identifier"
      ],
      "type": "string",
      "description": "String representing the object's type. Objects of the same type share the same value.\n"
    },
    "created_at": {
      "type": "integer",
      "format": "int64",
      "description": "Unix timestamp of creation\n"
    },
    "identifier": {
      "type": "string",
      "description": "An email address, email domain, phone number or web3 wallet.\n"
    },
    "updated_at": {
      "type": "integer",
      "format": "int64",
      "description": "Unix timestamp of last update.\n"
    },
    "instance_id": {
      "type": "string"
    },
    "identifier_type": {
      "enum": [
        "email_address",
        "phone_number",
        "web3_wallet"
      ],
      "type": "string"
    }
  }
}
object BlocklistIdentifiers
{
  "type": "object",
  "required": [
    "data",
    "total_count"
  ],
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/BlocklistIdentifier"
      }
    },
    "total_count": {
      "type": "integer",
      "format": "int64",
      "description": "Total number of blocklist identifiers\n"
    }
  }
}
object CNameTarget
{
  "type": "object",
  "required": [
    "host",
    "value",
    "required"
  ],
  "properties": {
    "host": {
      "type": "string"
    },
    "value": {
      "type": "string"
    },
    "required": {
      "type": "boolean",
      "description": "Denotes whether this CNAME target is required to be set in order for the domain to be considered deployed.\n"
    }
  }
}
object ClerkError
{
  "type": "object",
  "required": [
    "message",
    "long_message",
    "code"
  ],
  "properties": {
    "code": {
      "type": "string"
    },
    "meta": {
      "type": "object"
    },
    "message": {
      "type": "string"
    },
    "long_message": {
      "type": "string"
    },
    "clerk_trace_id": {
      "type": "string"
    }
  }
}
object ClerkErrors
{
  "type": "object",
  "required": [
    "errors"
  ],
  "properties": {
    "meta": {
      "type": "object"
    },
    "errors": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/ClerkError"
      }
    }
  }
}
object Client
{
  "type": "object",
  "required": [
    "object",
    "id",
    "session_ids",
    "sessions",
    "sign_in_id",
    "sign_up_id",
    "last_active_session_id",
    "updated_at",
    "created_at"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "String representing the identifier of the session.\n"
    },
    "object": {
      "enum": [
        "client"
      ],
      "type": "string",
      "description": "String representing the object's type. Objects of the same type share the same value.\n"
    },
    "sessions": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/Session"
      }
    },
    "created_at": {
      "type": "integer",
      "format": "int64",
      "description": "Unix timestamp of creation.\n"
    },
    "sign_in_id": {
      "type": "string",
      "nullable": true
    },
    "sign_up_id": {
      "type": "string",
      "nullable": true
    },
    "updated_at": {
      "type": "integer",
      "format": "int64",
      "description": "Unix timestamp of last update.\n"
    },
    "session_ids": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "last_active_session_id": {
      "type": "string",
      "nullable": true,
      "description": "Last active session_id.\n"
    }
  }
}
array ClientsListSortedByCreationDateResponse
{
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/Client"
  }
}
object ClientsVerifyClientTokenRequest
{
  "type": "object",
  "properties": {
    "token": {
      "type": "string",
      "description": "A JWT Token that represents the active client."
    }
  }
}
object DeletedObject
{
  "type": "object",
  "required": [
    "object",
    "deleted"
  ],
  "properties": {
    "id": {
      "type": "string"
    },
    "slug": {
      "type": "string"
    },
    "object": {
      "type": "string"
    },
    "deleted": {
      "type": "boolean"
    }
  }
}
object Domain
{
  "type": "object",
  "required": [
    "object",
    "id",
    "name",
    "is_satellite",
    "frontend_api_url",
    "development_origin"
  ],
  "properties": {
    "id": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "object": {
      "enum": [
        "domain"
      ],
      "type": "string"
    },
    "proxy_url": {
      "type": "string",
      "nullable": true
    },
    "is_satellite": {
      "type": "boolean"
    },
    "cname_targets": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/CNameTarget"
      },
      "nullable": true
    },
    "frontend_api_url": {
      "type": "string"
    },
    "development_origin": {
      "type": "string"
    },
    "accounts_portal_url": {
      "type": "string",
      "nullable": true,
      "description": "Null for satellite domains.\n"
    }
  }
}
object Domains
{
  "type": "object",
  "required": [
    "data",
    "total_count"
  ],
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/Domain"
      }
    },
    "total_count": {
      "type": "integer",
      "format": "int64",
      "description": "Total number of domains\n"
    }
  }
}
object DomainsAddSatelliteDomainRequest
{
  "type": "object",
  "required": [
    "name",
    "is_satellite"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "The new domain name. Can contain the port for development instances."
    },
    "proxy_url": {
      "type": "string",
      "description": "The full URL of the proxy which will forward requests to the Clerk Frontend API for this domain. Applicable only to production instances."
    },
    "is_satellite": {
      "enum": [
        true
      ],
      "type": "boolean",
      "description": "Marks the new domain as satellite. Only `true` is accepted at the moment."
    }
  }
}
object DomainsUpdateDomainRequest
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "nullable": true,
      "description": "The new domain name. For development instances, can contain the port,\ni.e `myhostname:3000`. For production instances, must be a valid FQDN,\ni.e `mysite.com`. Cannot contain protocol scheme."
    },
    "proxy_url": {
      "type": "string",
      "nullable": true,
      "description": "The full URL of the proxy that will forward requests to Clerk's Frontend API.\nCan only be updated for production instances."
    }
  }
}
object EmailAddress
{
  "type": "object",
  "required": [
    "object",
    "email_address",
    "verification",
    "linked_to",
    "reserved",
    "created_at",
    "updated_at"
  ],
  "properties": {
    "id": {
      "type": "string"
    },
    "object": {
      "enum": [
        "email_address"
      ],
      "type": "string",
      "description": "String representing the object's type. Objects of the same type share the same value.\n"
    },
    "reserved": {
      "type": "boolean"
    },
    "linked_to": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/IdentificationLink"
      }
    },
    "created_at": {
      "type": "integer",
      "format": "int64",
      "description": "Unix timestamp of creation\n"
    },
    "updated_at": {
      "type": "integer",
      "format": "int64",
      "description": "Unix timestamp of creation\n"
    },
    "verification": {
      "type": "object",
      "oneOf": [
        {
          "$ref": "#/components/schemas/OTP"
        },
        {
          "$ref": "#/components/schemas/Admin"
        },
        {
          "$ref": "#/components/schemas/Oauth"
        }
      ],
      "nullable": true
    },
    "email_address": {
      "type": "string"
    }
  }
}
object EmailAddressesCreateNewAddressRequest
{
  "type": "object",
  "properties": {
    "primary": {
      "type": "boolean",
      "nullable": true,
      "description": "Create this email address as the primary email address for the user.\nDefault: false, unless it is the first email address."
    },
    "user_id": {
      "type": "string",
      "description": "The ID representing the user"
    },
    "verified": {
      "type": "boolean",
      "nullable": true,
      "description": "When created, the email address will be marked as verified."
    },
    "email_address": {
      "type": "string",
      "description": "The new email address. Must adhere to the RFC 5322 specification for email address format."
    }
  }
}
object EmailAddressesUpdateAddressRequest
{
  "type": "object",
  "properties": {
    "primary": {
      "type": "boolean",
      "nullable": true,
      "description": "Set this email address as the primary email address for the user."
    },
    "verified": {
      "type": "boolean",
      "nullable": true,
      "description": "The email address will be marked as verified."
    }
  }
}
array EmailSmsTemplatesListSortedByPositionResponse
{
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/Template"
  }
}
object EmailSmsTemplatesPreviewTemplateRequest
{
  "type": "object",
  "properties": {
    "body": {
      "type": "string",
      "description": "The template body before variable interpolation"
    },
    "subject": {
      "type": "string",
      "nullable": true,
      "description": "The email subject.\nApplicable only to email templates."
    },
    "from_email_name": {
      "type": "string",
      "description": "The local part of the From email address that will be used for emails.\nFor example, in the address 'hello@example.com', the local part is 'hello'.\nApplicable only to email templates."
    }
  }
}
object EmailSmsTemplatesPreviewTemplateResponse
{
  "type": "object",
  "example": {},
  "properties": {}
}
object EmailSmsTemplatesToggleDeliveryByTypeAndSlugRequest
{
  "type": "object",
  "properties": {
    "delivered_by_clerk": {
      "type": "boolean",
      "nullable": true,
      "description": "Whether Clerk should deliver emails or SMS messages based on the current template"
    }
  }
}
object EmailSmsTemplatesUpdateTemplateByTypeAndSlugRequest
{
  "type": "object",
  "properties": {
    "body": {
      "type": "string",
      "description": "The template body before variable interpolation"
    },
    "name": {
      "type": "string",
      "description": "The user-friendly name of the template"
    },
    "markup": {
      "type": "string",
      "nullable": true,
      "description": "The editor markup used to generate the body of the template"
    },
    "subject": {
      "type": "string",
      "nullable": true,
      "description": "The email subject.\nApplicable only to email templates."
    },
    "from_email_name": {
      "type": "string",
      "description": "The local part of the From email address that will be used for emails.\nFor example, in the address 'hello@example.com', the local part is 'hello'.\nApplicable only to email templates."
    },
    "delivered_by_clerk": {
      "type": "boolean",
      "nullable": true,
      "description": "Whether Clerk should deliver emails or SMS messages based on the current template"
    }
  }
}
object IdentificationLink
{
  "type": "object",
  "required": [
    "type",
    "id"
  ],
  "properties": {
    "id": {
      "type": "string"
    },
    "type": {
      "enum": [
        "oauth_google",
        "oauth_mock",
        "saml"
      ],
      "type": "string"
    }
  }
}
object InstanceRestrictions
{
  "type": "object",
  "properties": {
    "object": {
      "enum": [
        "instance_restrictions"
      ],
      "type": "string",
      "description": "String representing the object's type. Objects of the same type share the same value."
    },
    "allowlist": {
      "type": "boolean"
    },
    "blocklist": {
      "type": "boolean"
    },
    "block_email_subaddresses": {
      "type": "boolean"
    }
  }
}
object InstanceSettingsUpdateInstanceSettingsRequest
{
  "type": "object",
  "properties": {
    "hibp": {
      "type": "boolean",
      "nullable": true,
      "description": "Whether the instance should be using the HIBP service to check passwords for breaches"
    },
    "test_mode": {
      "type": "boolean",
      "nullable": true,
      "description": "Toggles test mode for this instance, allowing the use of test email addresses and phone numbers.\nDefaults to true for development instances."
    },
    "support_email": {
      "type": "string",
      "nullable": true
    },
    "cookieless_dev": {
      "type": "boolean",
      "deprecated": true,
      "description": "Whether the instance should operate in cookieless development mode (i.e. without third-party cookies).\nDeprecated: Please use `url_based_session_syncing` instead."
    },
    "allowed_origins": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "For browser-like stacks such as browser extensions, Electron, or Capacitor.js the instance allowed origins need to be updated with the request origin value.\nFor Chrome extensions popup, background, or service worker pages the origin is chrome-extension://extension_uiid. For Electron apps the default origin is http://localhost:3000. For Capacitor, the origin is capacitor://localhost."
    },
    "clerk_js_version": {
      "type": "string",
      "nullable": true
    },
    "development_origin": {
      "type": "string",
      "nullable": true
    },
    "url_based_session_syncing": {
      "type": "boolean",
      "description": "Whether the instance should use URL-based session syncing in development mode (i.e. without third-party cookies)."
    },
    "enhanced_email_deliverability": {
      "type": "boolean",
      "nullable": true,
      "description": "The \"enhanced_email_deliverability\" feature will send emails from \"verifications@clerk.dev\" instead of your domain.\nThis can be helpful if you do not have a high domain reputation."
    }
  }
}
object InstanceSettingsUpdateOrganizationSettingsRequest
{
  "type": "object",
  "properties": {
    "enabled": {
      "type": "boolean",
      "nullable": true
    },
    "creator_role_id": {
      "type": "string",
      "description": "Specify what the default organization role is for an organization creator."
    },
    "domains_enabled": {
      "type": "boolean",
      "nullable": true
    },
    "admin_delete_enabled": {
      "type": "boolean",
      "nullable": true
    },
    "domains_default_role_id": {
      "type": "string",
      "description": "Specify what the default organization role is for the organization domains."
    },
    "max_allowed_memberships": {
      "type": "integer",
      "nullable": true
    },
    "domains_enrollment_modes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Specify which enrollment modes to enable for your Organization Domains.\nSupported modes are 'automatic_invitation' & 'automatic_suggestion'."
    }
  }
}
object InstanceSettingsUpdateRestrictionsRequest
{
  "type": "object",
  "properties": {
    "allowlist": {
      "type": "boolean",
      "nullable": true
    },
    "blocklist": {
      "type": "boolean",
      "nullable": true
    },
    "block_email_subaddresses": {
      "type": "boolean",
      "nullable": true
    },
    "block_disposable_email_domains": {
      "type": "boolean",
      "nullable": true
    }
  }
}
object Invitation
{
  "type": "object",
  "required": [
    "object",
    "id",
    "email_address",
    "status",
    "created_at",
    "updated_at"
  ],
  "properties": {
    "id": {
      "type": "string"
    },
    "url": {
      "type": "string",
      "nullable": true
    },
    "object": {
      "enum": [
        "invitation"
      ],
      "type": "string"
    },
    "status": {
      "enum": [
        "pending",
        "accepted",
        "revoked"
      ],
      "type": "string",
      "example": "pending"
    },
    "revoked": {
      "type": "boolean",
      "example": false
    },
    "created_at": {
      "type": "integer",
      "format": "int64",
      "description": "Unix timestamp of creation.\n"
    },
    "updated_at": {
      "type": "integer",
      "format": "int64",
      "description": "Unix timestamp of last update.\n"
    },
    "email_address": {
      "type": "string",
      "format": "email"
    },
    "public_metadata": {
      "type": "object"
    }
  }
}
object InvitationsCreateNewInvitationRequest
{
  "type": "object",
  "required": [
    "email_address"
  ],
  "properties": {
    "notify": {
      "type": "boolean",
      "default": true,
      "nullable": true,
      "description": "Optional flag which denotes whether an email invitation should be sent to the given email address.\nDefaults to true."
    },
    "redirect_url": {
      "type": "string",
      "description": "Optional URL which specifies where to redirect the user once they click the invitation link.\nThis is only required if you have implemented a [custom flow](https://clerk.com/docs/authentication/invitations#custom-flow) and you're not using Clerk Hosted Pages or Clerk Components."
    },
    "email_address": {
      "type": "string",
      "description": "The email address the invitation will be sent to"
    },
    "ignore_existing": {
      "type": "boolean",
      "default": false,
      "nullable": true,
      "description": "Whether an invitation should be created if there is already an existing invitation for this email address, or it's claimed by another user."
    },
    "public_metadata": {
      "type": "object",
      "description": "Metadata that will be attached to the newly created invitation.\nThe value of this property should be a well-formed JSON object.\nOnce the user accepts the invitation and signs up, these metadata will end up in the user's public metadata."
    }
  }
}
array InvitationsListAllNonRevokedResponse
{
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/Invitation"
  }
}
object InvitationsRevokeInvitationResponse
{
  "allOf": [
    {
      "$ref": "#/components/schemas/Invitation"
    },
    {
      "type": "object",
      "properties": {
        "status": {
          "enum": [
            "revoked"
          ],
          "type": "string",
          "example": "revoked"
        },
        "revoked": {
          "enum": [
            true
          ],
          "type": "boolean",
          "example": true
        }
      }
    }
  ]
}
object JWTTemplate
{
  "type": "object",
  "required": [
    "object",
    "id",
    "name",
    "claims",
    "lifetime",
    "allowed_clock_skew",
    "created_at",
    "updated_at"
  ],
  "properties": {
    "id": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "claims": {
      "type": "object"
    },
    "object": {
      "enum": [
        "jwt_template"
      ],
      "type": "string"
    },
    "lifetime": {
      "type": "integer"
    },
    "created_at": {
      "type": "integer",
      "format": "int64",
      "description": "Unix timestamp of creation.\n"
    },
    "updated_at": {
      "type": "integer",
      "format": "int64",
      "description": "Unix timestamp of last update.\n"
    },
    "signing_algorithm": {
      "type": "string"
    },
    "allowed_clock_skew": {
      "type": "integer"
    },
    "custom_signing_key": {
      "type": "boolean"
    }
  }
}
object JwtTemplatesCreateTemplateRequest
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "nullable": false,
      "description": "JWT template name"
    },
    "claims": {
      "type": "object",
      "nullable": false,
      "description": "JWT template claims in JSON format"
    },
    "lifetime": {
      "type": "number",
      "maximum": 315360000,
      "minimum": 30,
      "nullable": true,
      "description": "JWT token lifetime"
    },
    "signing_key": {
      "type": "string",
      "nullable": true,
      "description": "The custom signing private key to use when minting JWTs"
    },
    "signing_algorithm": {
      "type": "string",
      "nullable": true,
      "description": "The custom signing algorithm to use when minting JWTs"
    },
    "allowed_clock_skew": {
      "type": "number",
      "maximum": 300,
      "minimum": 0,
      "nullable": true,
      "description": "JWT token allowed clock skew"
    },
    "custom_signing_key": {
      "type": "boolean",
      "nullable": false,
      "description": "Whether a custom signing key/algorithm is also provided for this template"
    }
  }
}
array JwtTemplatesListAllTemplatesResponse
{
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/JWTTemplate"
  }
}
object JwtTemplatesUpdateTemplateByIdRequest
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "nullable": false,
      "description": "JWT template name"
    },
    "claims": {
      "type": "object",
      "nullable": false,
      "description": "JWT template claims in JSON format"
    },
    "lifetime": {
      "type": "number",
      "maximum": 315360000,
      "minimum": 30,
      "nullable": true,
      "description": "JWT token lifetime"
    },
    "signing_key": {
      "type": "string",
      "nullable": true,
      "description": "The custom signing private key to use when minting JWTs"
    },
    "signing_algorithm": {
      "type": "string",
      "nullable": true,
      "description": "The custom signing algorithm to use when minting JWTs"
    },
    "allowed_clock_skew": {
      "type": "number",
      "maximum": 300,
      "minimum": 0,
      "nullable": true,
      "description": "JWT token allowed clock skew"
    },
    "custom_signing_key": {
      "type": "boolean",
      "nullable": false,
      "description": "Whether a custom signing key/algorithm is also provided for this template"
    }
  }
}
object OAuthApplication
{
  "type": "object",
  "required": [
    "object",
    "id",
    "instance_id",
    "name",
    "public",
    "client_id",
    "scopes",
    "callback_url",
    "authorize_url",
    "token_fetch_url",
    "user_info_url",
    "created_at",
    "updated_at"
  ],
  "properties": {
    "id": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "object": {
      "enum": [
        "oauth_application"
      ],
      "type": "string"
    },
    "public": {
      "type": "boolean"
    },
    "scopes": {
      "type": "string"
    },
    "client_id": {
      "type": "string"
    },
    "created_at": {
      "type": "integer",
      "format": "int64",
      "description": "Unix timestamp of creation.\n"
    },
    "updated_at": {
      "type": "integer",
      "format": "int64",
      "description": "Unix timestamp of last update.\n"
    },
    "instance_id": {
      "type": "string"
    },
    "callback_url": {
      "type": "string"
    },
    "authorize_url": {
      "type": "string"
    },
    "user_info_url": {
      "type": "string"
    },
    "token_fetch_url": {
      "type": "string"
    }
  }
}
object OAuthApplicationWithSecret
{
  "allOf": [
    {
      "$ref": "#/components/schemas/OAuthApplication"
    },
    {
      "type": "object",
      "properties": {
        "client_secret": {
          "type": "string",
          "description": "Empty if public client.\n"
        }
      }
    }
  ]
}
object OAuthApplications
{
  "type": "object",
  "required": [
    "data",
    "total_count"
  ],
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/OAuthApplication"
      }
    },
    "total_count": {
      "type": "integer",
      "format": "int64",
      "description": "Total number of OAuth applications\n"
    }
  }
}
object OAuthApplicationsCreateNewApplicationRequest
{
  "type": "object",
  "required": [
    "name",
    "callback_url"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "The name of the new OAuth application"
    },
    "public": {
      "type": "boolean",
      "description": "If true, this client is public and cannot securely store a client secret.\nOnly the authorization code flow with proof key for code exchange (PKCE) may be used.\nPublic clients cannot be updated to be confidential clients, and vice versa."
    },
    "scopes": {
      "type": "string",
      "default": "profile email",
      "example": "profile email public_metadata",
      "description": "Define the allowed scopes for the new OAuth applications that dictate the user payload of the OAuth user info endpoint. Available scopes are `profile`, `email`, `public_metadata`, `private_metadata`. Provide the requested scopes as a string, separated by spaces."
    },
    "callback_url": {
      "type": "string",
      "description": "The callback URL of the new OAuth application"
    }
  }
}
object OAuthApplicationsUpdateApplicationRequest
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "The new name of the OAuth application"
    },
    "scopes": {
      "type": "string",
      "default": "profile email",
      "example": "profile email public_metadata private_metadata",
      "description": "Define the allowed scopes for the new OAuth applications that dictate the user payload of the OAuth user info endpoint. Available scopes are `profile`, `email`, `public_metadata`, `private_metadata`. Provide the requested scopes as a string, separated by spaces."
    },
    "callback_url": {
      "type": "string",
      "description": "The new callback URL of the OAuth application"
    }
  }
}

Versions

Version Endpoints Schemas Ingested Status
v1 109 112 2026-05-11 current
v1 109 112 2026-04-16