> ## Documentation Index
> Fetch the complete documentation index at: https://api-docs.voicecheap.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Einen MCP-OAuth-Client registrieren

> Registrieren Sie einen öffentlichen Client mit exakten Callback-URLs und einer begrenzten Menge an Produktberechtigungen.

Registrieren Sie einen öffentlichen Client mit exakten Callback-URLs und einer begrenzten Menge an Produktberechtigungen.

```http theme={null}
POST https://api.voicecheap.ai/oauth/register
```

## Authentifizierung

Keine. Die Registrierung meldet keinen Benutzer an und autorisiert keine Kontoverbindung.

## Anfragetext

<ParamField body="redirect_uris" type="array" required>
  Zwischen 1 und 10 Callbacks vor dem Entfernen von Duplikaten.

  Mindestanzahl an Elementen: 1. Höchstanzahl an Elementen: 10.
</ParamField>

<ParamField body="client_name" type="string">
  Optionale Client-Bezeichnung; führende und nachgestellte Leerzeichen werden vor dem Speichern entfernt, und der Wert darf danach nicht leer sein.

  Mindestlänge: 1. Höchstlänge: 120. Muster: `^(?=.*\S)[^\u0000-\u001F\u007F]+$`. Standardwert: "MCP client".
</ParamField>

<ParamField body="token_endpoint_auth_method" type="field">
  Nur öffentliche Clients.

  Erforderlicher Wert: "none". Standardwert: "none".
</ParamField>

<ParamField body="grant_types" type="union">
  Muss authorization\_code enthalten; refresh\_token ist optional. Bei Auslassung oder null werden beide ausgewählt. Doppelte Werte werden entfernt.

  Standardwert: \["authorization\_code","refresh\_token"].
</ParamField>

<ParamField body="response_types" type="array">
  Liste von Werten. Die Struktur der Elemente finden Sie im vollständigen Eingabeschema.

  Mindestanzahl an Elementen: 1. Höchstanzahl an Elementen: 1. Standardwert: \["code"].
</ParamField>

<ParamField body="scope" type="string">
  Durch Leerzeichen getrennte Berechtigungen aus scopes\_supported, optional einschließlich offline\_access. Nicht unterstützte Namen und Werte, die nur aus Leerraum bestehen, werden abgelehnt; Duplikate werden entfernt. Wird scope weggelassen oder werden keine Produktberechtigungen angegeben, etwa nur openid oder nur offline\_access, werden alle unterstützten Produktberechtigungen registriert. email erfordert openid; email allein wird abgelehnt. Wenn OpenID Connect verfügbar ist, umfasst die Registrierung openid und email als Clientfähigkeiten, auch wenn scope fehlt. Die Registrierung gewährt keinen Zugriff; Identitätsberechtigungen erfordern eine ausdrückliche Autorisierungsanfrage und die Zustimmung des Benutzers.

  Mindestlänge: 1. Höchstlänge: 2048. Muster: `^ *(?:account:read|usage:read|settings:read|settings:write|team:read|team:write|projects:read|projects:write|projects:delete|translations:write|transcription:read|transcription:write|subtitles:read|subtitles:write|tts:read|tts:write|voices:read|voices:write|images:read|images:write|thumbnails:read|thumbnails:write|folders:read|folders:write|glossary:read|glossary:write|webhooks:read|webhooks:write|publishing:read|publishing:write|offline_access|openid|email)(?: +(?:account:read|usage:read|settings:read|settings:write|team:read|team:write|projects:read|projects:write|projects:delete|translations:write|transcription:read|transcription:write|subtitles:read|subtitles:write|tts:read|tts:write|voices:read|voices:write|images:read|images:write|thumbnails:read|thumbnails:write|folders:read|folders:write|glossary:read|glossary:write|webhooks:read|webhooks:write|publishing:read|publishing:write|offline_access|openid|email))* *$`.
</ParamField>

<Accordion title="Technisches Schema">
  ```json theme={null}
  {
    "type": "object",
    "properties": {
      "redirect_uris": {
        "type": "array",
        "minItems": 1,
        "maxItems": 10,
        "items": {
          "type": "string",
          "minLength": 1,
          "maxLength": 2048,
          "pattern": "^[^\\s\\u0000-\\u001F\\u007F-\\u009F#\\\\]+$",
          "format": "uri",
          "anyOf": [
            {
              "pattern": "^[Hh][Tt][Tt][Pp][Ss]://"
            },
            {
              "pattern": "^http://(?:localhost|127\\.0\\.0\\.1|\\[::1\\])(?::[0-9]{1,5})?(?:/|\\?|$)"
            },
            {
              "const": "cursor://anysphere.cursor-mcp/oauth/callback"
            }
          ],
          "description": "An absolute HTTPS callback, an HTTP callback using the exact lowercase loopback spelling localhost, 127.0.0.1, or [::1], or exactly cursor://anysphere.cursor-mcp/oauth/callback. Must parse as a URL with no username/password, whitespace, control characters, backslashes, or fragment. A loopback port must be a valid URL port. The exact spelling is retained."
        },
        "description": "Between 1 and 10 callbacks before duplicates are removed."
      },
      "client_name": {
        "type": "string",
        "minLength": 1,
        "maxLength": 120,
        "pattern": "^(?=.*\\S)[^\\u0000-\\u001F\\u007F]+$",
        "default": "MCP client",
        "description": "Optional client label; trimmed before saving and must remain nonempty."
      },
      "token_endpoint_auth_method": {
        "const": "none",
        "default": "none",
        "description": "Public clients only."
      },
      "grant_types": {
        "anyOf": [
          {
            "type": "array",
            "minItems": 1,
            "items": {
              "enum": [
                "authorization_code",
                "refresh_token"
              ]
            },
            "contains": {
              "const": "authorization_code"
            }
          },
          {
            "type": "null"
          }
        ],
        "default": [
          "authorization_code",
          "refresh_token"
        ],
        "description": "Must include authorization_code; refresh_token is optional. Omitted or null selects both. Duplicate values are removed."
      },
      "response_types": {
        "type": "array",
        "minItems": 1,
        "maxItems": 1,
        "items": {
          "const": "code"
        },
        "default": [
          "code"
        ]
      },
      "scope": {
        "type": "string",
        "minLength": 1,
        "maxLength": 2048,
        "pattern": "^ *(?:account:read|usage:read|settings:read|settings:write|team:read|team:write|projects:read|projects:write|projects:delete|translations:write|transcription:read|transcription:write|subtitles:read|subtitles:write|tts:read|tts:write|voices:read|voices:write|images:read|images:write|thumbnails:read|thumbnails:write|folders:read|folders:write|glossary:read|glossary:write|webhooks:read|webhooks:write|publishing:read|publishing:write|offline_access|openid|email)(?: +(?:account:read|usage:read|settings:read|settings:write|team:read|team:write|projects:read|projects:write|projects:delete|translations:write|transcription:read|transcription:write|subtitles:read|subtitles:write|tts:read|tts:write|voices:read|voices:write|images:read|images:write|thumbnails:read|thumbnails:write|folders:read|folders:write|glossary:read|glossary:write|webhooks:read|webhooks:write|publishing:read|publishing:write|offline_access|openid|email))* *$",
        "description": "Space-delimited permissions from scopes_supported, optionally including offline_access. Unsupported names and whitespace-only values are rejected; duplicates are removed. Omitting scope or supplying no product scopes, such as openid alone or offline_access alone, registers all supported product scopes. email requires openid; email alone is rejected. When OpenID Connect is available, registration includes openid and email as client capabilities even when scope is omitted. Registration grants no access; identity permissions require an explicit authorization request and user consent.",
        "examples": [
          "account:read projects:read offline_access"
        ]
      }
    },
    "required": [
      "redirect_uris"
    ],
    "additionalProperties": true
  }
  ```
</Accordion>

## Anfragebeispiele

Beachten Sie die für diese Route dokumentierte Kodierung und Authentifizierung. Die Antwortstruktur und Idempotenzregeln der Aktions-API gelten nur für Aktionsaufrufe.

<RequestExample>
  ```bash cURL theme={null}
  curl --request POST 'https://api.voicecheap.ai/oauth/register' \
    --header 'Content-Type: application/json' \
    --data '{"client_name":"Acme assistant","redirect_uris":["https://assistant.example.com/oauth/callback"],"token_endpoint_auth_method":"none","grant_types":["authorization_code","refresh_token"],"response_types":["code"],"scope":"account:read projects:read offline_access"}'
  ```

  ```javascript JavaScript theme={null}
  const input = {
    client_name: 'Acme assistant',
    redirect_uris: ['https://assistant.example.com/oauth/callback'],
    token_endpoint_auth_method: 'none',
    grant_types: ['authorization_code', 'refresh_token'],
    response_types: ['code'],
    scope: 'account:read projects:read offline_access',
  };
  const response = await fetch('https://api.voicecheap.ai/oauth/register', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(input),
    redirect: 'manual',
  });
  console.log(response.status, await response.text());
  ```

  ```python Python theme={null}
  import os
  import requests

  response = requests.request(
      "POST",
      "https://api.voicecheap.ai/oauth/register",
      headers={"Content-Type":"application/json"},
      json={"client_name": "Acme assistant", "redirect_uris": ["https://assistant.example.com/oauth/callback"], "token_endpoint_auth_method": "none", "grant_types": ["authorization_code", "refresh_token"], "response_types": ["code"], "scope": "account:read projects:read offline_access"},
      timeout=120,
      allow_redirects=False,
  )
  print(response.status_code, response.text)
  ```
</RequestExample>

## Antwort

Registrierte Metadaten des öffentlichen Clients. Speichern Sie client\_id und verwenden Sie sie mit der exakt registrierten redirect\_uri. Es wird kein client\_secret ausgestellt.

```json HTTP 201 theme={null}
{
  "client_id": "mcp_client_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
  "client_id_issued_at": 1792152000,
  "client_name": "Acme assistant",
  "redirect_uris": ["https://assistant.example.com/oauth/callback"],
  "token_endpoint_auth_method": "none",
  "grant_types": ["authorization_code", "refresh_token"],
  "response_types": ["code"],
  "scope": "account:read projects:read offline_access"
}
```

## Antwortheader

```json theme={null}
{
  "Cache-Control": "no-store",
  "Pragma": "no-cache"
}
```

## Hinweise zur Operation

* Erkannte skalare Parameter müssen genau einmal als nicht leere Zeichenfolgen ohne ASCII-Steuerzeichen oder DEL übergeben werden. Wiederholte Abfrage- oder Formularfelder werden als Arrays dekodiert und beim Lesen als Skalare abgelehnt.
* Verwenden Sie Content-Type application/json. Ein URL-codierter Registrierungs-Body wird mit der OAuth-Antwort invalid\_request abgelehnt; nicht unterstützte Medientypen können bereits zuvor vom Integrationsparser abgelehnt werden.
* Weiterleitungs-URIs werden unverändert gespeichert und exakt verglichen. Änderungen an Groß- und Kleinschreibung, Portschreibweise, Pfad, Abfrage oder abschließendem Schrägstrich erfordern die Registrierung genau dieser URI.
* HTTP-Callbacks akzeptieren nur die unveränderten Loopback-Namen localhost, 127.0.0.1 und \[::1]. Hosts in privaten Netzwerken, alternative IP-Schreibweisen, \*.localhost und das großgeschriebene LOCALHOST erfüllen diese Voraussetzung nicht.
* Der einzige akzeptierte Callback mit benutzerdefiniertem URI-Schema lautet genau cursor://anysphere.cursor-mcp/oauth/callback.
* Jeder Callback muss die Validierung bestehen; ein ungültiger Callback führt zur Ablehnung der gesamten Registrierung. Zugangsdaten in URLs, Leerraum, Steuerzeichen, Fragmente und umgekehrte Schrägstriche werden abgelehnt.
* Der Client kann beliebige unterstützte Produktberechtigungsbereiche registrieren, aber der Benutzer muss die angefragte Teilmenge bei der Autorisierung separat genehmigen. Die Registrierung allein gewährt keinen Zugriff.
* Nur die Grant-Typen authorization\_code und optional refresh\_token werden unterstützt. Ein ohne refresh\_token registrierter Client erhält kein Refresh-Token.
* Unbekannte Metadatenfelder auf oberster Ebene werden von der aktuellen Implementierung ignoriert. Für bekannte Felder gelten weiterhin die im Schema angegebenen Einschränkungen.
* Das öffentliche Registrierungslimit beträgt 10 Anfragen pro 10 Minuten und Client-IP und gilt gemeinsam für alle Worker. JSON-Bodys sind auf 1 MiB begrenzt.
* Eine erfolgreiche Registrierung gibt HTTP 201 zurück.
* openid und email sind Identitätsberechtigungen, getrennt von Produktberechtigungen, und werden nur akzeptiert, wenn sie angekündigt werden. email erfordert openid. Bei der ersten Autorisierung verwendet eine Anfrage nur mit Identitäts-Scopes die auf dem Zustimmungsbildschirm angezeigten Standard-Produktberechtigungen.

## Fehler

| HTTP-Status | Code | Bedeutung oder Behebung |
| - | - | - |
| 400 | `invalid_request` | Der Anfragetext oder ein erkannter Parameter ist ungültig, fehlt, ist doppelt vorhanden oder hat die falsche Kodierung. |
| 400 | `invalid_client_metadata` | Ungültige Anzahl von Callbacks, leere Clientbezeichnung oder nicht unterstützte Clientauthentifizierung, Grant-Typen oder Antworttypen. |
| 400 | `invalid_redirect_uri` | Eine Callback-URL verwendet eine nicht unterstützte oder unsichere Form. |
| 400 | `invalid_scope` | Die scope-Zeichenfolge enthält eine nicht unterstützte Berechtigung oder keine angeforderten Berechtigungen. |
| 413 | `REQUEST_TOO_LARGE` | Die Anfrage überschreitet die zulässige Größe des Anfragetexts. JSON ist auf 1 MiB und URL-kodierte Formulare sind auf 32 KiB begrenzt. |
| 415 | `UNSUPPORTED_CONTENT_TYPE` | Der Body-Parser der Integration akzeptiert nur JSON oder URL-codierte Formulardaten. Die Route kann ausdrücklich eine dieser Codierungen erfordern. |
| 429 | `temporarily_unavailable` | Das öffentliche Anfrageratenlimit für OAuth wurde erreicht. Warten Sie vor einem erneuten Versuch das aktuelle Zeitfenster ab. |
| 500 | `server_error` | Die Autorisierung ist vorübergehend nicht verfügbar. Versuchen Sie es später erneut. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.