Skip to content

Dynamic Client Registration (RFC 7591)

POST
/oauth/register
curl --request POST \
--url https://app.buildworkpro.com/api/v1/oauth/register \
--header 'Content-Type: application/json' \
--data '{ "client_name": "example", "redirect_uris": [ "https://example.com" ], "grant_types": [ "authorization_code", "refresh_token" ], "scope": "", "token_endpoint_auth_method": "none", "contact": "hello@example.com" }'

Self-registers a new OAuth client. Public endpoint — no authentication required. Per-IP rate-limited to 5 requests/minute. Each redirect_uri must be https, a loopback http URL on any port (http://127.0.0.1:{port}, http://localhost:{port}, http://[::1]:{port} — RFC 8252 §7.3), or a private-use scheme such as cursor:// (RFC 8252 §7.1); script-injection schemes (javascript:, data:, file:, blob:), embedded credentials, and fragments are rejected.

Media type application/json
object
client_name
required
string
>= 1 characters <= 200 characters
redirect_uris
required
Array<string>
>= 1 items <= 10 items
grant_types
Array<string>
default: authorization_code,refresh_token
Allowed values: authorization_code refresh_token
scope
string
""
token_endpoint_auth_method
string
default: none
Allowed values: none client_secret_basic client_secret_post
contact
string format: email

Client registered

Media type application/json
object
client_id
required
string
client_secret
string
client_id_issued_at
required
integer
client_name
required
string
client_secret_expires_at
integer
redirect_uris
required
Array<string>
grant_types
required
Array<string>
scope
required
string
token_endpoint_auth_method
required
string
Allowed values: none client_secret_basic client_secret_post
Example
{
"token_endpoint_auth_method": "none"
}

RFC 7591 error envelope (invalid_client_metadata, invalid_redirect_uri, invalid_scope)

Media type application/json
object
error
required
string
error_description
string
Example generated
{
"error": "example",
"error_description": "example"
}

Per-IP rate limit exceeded

Media type application/json
object
error
required
string
error_description
string
Example generated
{
"error": "example",
"error_description": "example"
}