---
title: "Register Client"
method: POST
path: "/oauth/register"
tags: ["oauth-mcp"]
---

# Register Client

`POST /oauth/register`

## Request

- Base URL: `https://api.meetadmiral.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.meetadmiral.com/oauth/register`
- Auth: none declared

Let an assistant introduce itself.

This grants nothing. A row here is a name and a list of addresses a code
may be returned to; every authorization still goes through a person who is
signed in to Admiral and choosing an account. The reason to check anything
at all is the redirect URIs, because those are the one field that can send
somebody else's code somewhere it should not go.

RFC 7591 requires this to be open, and it is — but it was the only public
endpoint in the app with no rate limit, and every accepted POST inserts a
row. "Grants nothing" is about authority, not about cost: an unbounded
writer against a table is still a way to fill a database. The limit is
generous, because a real assistant registers once per deployment and a
developer testing an integration may legitimately do it a few dozen
times in an afternoon.

## Request body

- RegistrationBody
  - `redirect_uris` string[], required
  - `client_name` string
  - `client_uri` string, nullable
  - `software_id` string, nullable
  - `grant_types` string[], nullable
  - `token_endpoint_auth_method` string, nullable

## Response `201`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/meetadmiral/apis/admiral-api.md) · [All operations](https://skmtc.dev/meetadmiral/apis/admiral-api/llms.txt) · [OpenAPI document](https://skmtc.dev/meetadmiral/apis/admiral-api/revisions/3cf1ee58ce50?raw)
