---
title: "Dynamically register an OAuth2 client (RFC 7591)"
method: POST
path: "/v2/oauth/register"
tags: ["Dynamic Client Registration"]
---

# Dynamically register an OAuth2 client (RFC 7591)

`POST /v2/oauth/register`

Register a new OAuth2 client via unauthenticated Dynamic Client Registration.

Public/PKCE clients (token_endpoint_auth_method == "none") receive no
client_secret. Confidential clients receive a one-time client_secret that
cannot be retrieved again after this response.

Errors render as RFC 7591's ``{"error", "error_description"}`` shape, not
api_v2's usual JSON:API envelope (mirrors token_exchange) -- see
client_service.register_client's docstring for why, and for why no org is
bound / audited here yet.

## Request body

- DynamicClientRegistrationRequest — RFC 7591 dynamic client registration request body. ``redirect_uris`` is validated in the service layer, not here, so an invalid URI surfaces as the domain-specific 400 rather than a generic Pydantic 422 (see .claude/rules/api-v2.md).
  - `client_name` string, required
  - `redirect_uris` string[]
  - `grant_types` string[], nullable
  - `token_endpoint_auth_method` string
  - `scope` string, nullable
  - `resource` string

## Response `201`

Created

- DynamicClientRegistrationResponse — RFC 7591 dynamic client registration response. ``client_secret`` is only present for confidential clients (``token_endpoint_auth_method != "none"``); omitted (not null) for public/PKCE clients so callers can distinguish "no secret issued" from "field not applicable."
  - `client_id` string, required
  - `client_secret` string, nullable
  - `client_name` string, required
  - `redirect_uris` string[], required
  - `grant_types` string[], required
  - `token_endpoint_auth_method` string, required
  - `scope` string, required

## Other responses

- `400` — Bad Request
- `405` — Method Not Allowed
- `429` — Too Many Requests
- `500` — Internal Server Error

---

[API](https://skmtc.net/skilljar/apis/skilljar-api-v2.md) · [All operations](https://skmtc.net/skilljar/apis/skilljar-api-v2/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/skilljar/skilljar-api-v2/revisions/f8025de20169/schema)
