> ## 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.

# Revocar una conexión OAuth de MCP

> Revoca una conexión usando uno de sus tokens de acceso o de actualización y el client_id registrado.

Revoca una conexión usando uno de sus tokens de acceso o de actualización y el client\_id registrado.

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

## Autenticación

Sin secreto de cliente. Envía token y client\_id en el cuerpo del formulario codificado como URL.

## Cuerpo de la solicitud

<ParamField body="token" type="string" required>
  Un token de acceso o actualización MCP emitido. Las cadenas de token desconocidas se aceptan sin revelar si existe un token.

  Longitud mínima: 1. Longitud máxima: 256. Patrón: `^[^\u0000-\u001F\u007F]+$`.
</ParamField>

<ParamField body="client_id" type="string" required>
  El client\_id asociado al token. Se rechaza un escalar ausente o con un formato incorrecto; un cliente desconocido o que no coincida devuelve una respuesta exitosa.

  Longitud mínima: 1. Longitud máxima: 2048. Patrón: `^[^\u0000-\u001F\u007F]+$`.
</ParamField>

<ParamField body="token_type_hint" type="field">
  Indicación estándar opcional. Esta implementación ignora este campo y no valida su valor; los prefijos de los tokens determinan la familia del
  token.
</ParamField>

<Accordion title="Esquema técnico">
  ```json theme={null}
  {
    "type": "object",
    "properties": {
      "token": {
        "type": "string",
        "minLength": 1,
        "maxLength": 256,
        "pattern": "^[^\\u0000-\\u001F\\u007F]+$",
        "description": "An issued MCP access or refresh token. Unknown token strings are accepted without revealing whether a token exists."
      },
      "client_id": {
        "type": "string",
        "minLength": 1,
        "maxLength": 2048,
        "pattern": "^[^\\u0000-\\u001F\\u007F]+$",
        "description": "The client_id associated with the token. A missing or malformed scalar is rejected; an unknown or mismatched client returns success."
      },
      "token_type_hint": {
        "description": "Optional standard hint. This implementation ignores this field and does not validate its value; token prefixes determine the token family."
      }
    },
    "required": [
      "token",
      "client_id"
    ],
    "additionalProperties": true
  }
  ```
</Accordion>

## Ejemplos de solicitud

Sigue la codificación y la autenticación documentadas para esta ruta. El formato envolvente y las reglas de idempotencia de la API de acciones solo se aplican a las invocaciones de acciones.

<RequestExample>
  ```bash cURL theme={null}
  curl --request POST 'https://api.voicecheap.ai/oauth/revoke' \
    --header 'Content-Type: application/x-www-form-urlencoded' \
    --data-urlencode 'token=mcp_refresh_EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE' \
    --data-urlencode 'client_id=mcp_client_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' \
    --data-urlencode 'token_type_hint=refresh_token'
  ```

  ```javascript JavaScript theme={null}
  const input = {
    token: 'mcp_refresh_EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE',
    client_id: 'mcp_client_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
    token_type_hint: 'refresh_token',
  };
  const response = await fetch('https://api.voicecheap.ai/oauth/revoke', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
    },
    body: new URLSearchParams(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/revoke",
      headers={"Content-Type":"application/x-www-form-urlencoded"},
      data={"token": "mcp_refresh_EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE", "client_id": "mcp_client_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "token_type_hint": "refresh_token"},
      timeout=120,
      allow_redirects=False,
  )
  print(response.status_code, response.text)
  ```
</RequestExample>

## Respuesta

Un objeto JSON vacío. Los tokens desconocidos, las asociaciones de cliente incorrectas y las conexiones ya revocadas también devuelven HTTP 200.

```json HTTP 200 theme={null}
{}
```

## Cabeceras de respuesta

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

## Notas de la operación

* Los parámetros escalares reconocidos deben proporcionarse una sola vez como cadenas no vacías, sin caracteres de control ASCII ni DEL. Los campos repetidos de consulta o formulario se decodifican como arrays y se rechazan al leerse como escalares.
* Usa application/x-www-form-urlencoded. Las solicitudes JSON se rechazan con invalid\_request.
* Revocar un token de acceso o de actualización reconocido revoca toda la conexión y elimina su token de actualización activo; no se limita al token proporcionado.
* El parámetro resource no es obligatorio ni se comprueba en esta ruta. Se ignoran token\_type\_hint y los demás campos no reconocidos.
* El endpoint no obtiene primero el registro de un cliente. Un client\_id desconocido con formato correcto, un client\_id incorrecto para el token o un token desconocido devuelve \{} sin revelar la validez del token.
* El límite público de revocación es de 60 solicitudes por minuto por IP de cliente, compartido entre los procesos de trabajo. Los cuerpos codificados en formato URL tienen un límite de 32 KiB.
* El client\_id devuelto por el registro dinámico o la URL HTTPS pública exacta del documento de metadatos del cliente.

## Errores

| Estado HTTP | Código | Significado o solución |
| - | - | - |
| 400 | `invalid_request` | El cuerpo o un parámetro reconocido no es válido, falta, está duplicado o tiene una codificación incorrecta. |
| 413 | `REQUEST_TOO_LARGE` | La solicitud supera el tamaño de cuerpo permitido. JSON está limitado a 1 MiB y los formularios codificados como URL a 32 KiB. |
| 415 | `UNSUPPORTED_CONTENT_TYPE` | El analizador del cuerpo de la integración solo acepta JSON o formularios codificados como URL. La ruta puede exigir específicamente una de esas codificaciones. |
| 429 | `temporarily_unavailable` | Se ha alcanzado el límite público de frecuencia de solicitudes OAuth. Espera a que termine la ventana actual antes de reintentarlo. |
| 500 | `server_error` | La autorización no está disponible temporalmente. Vuelve a intentarlo más tarde. |


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