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'
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());
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)
OAuth e protocolo MCP
Revogar uma conexão OAuth MCP
Revogue uma conexão usando um de seus tokens de acesso ou atualização e o client_id registrado.
POST
/
oauth
/
revoke
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'
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());
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)
Revogue uma conexão usando um de seus tokens de acesso ou atualização e o client_id registrado.
POST https://api.voicecheap.ai/oauth/revoke
Autenticação
Sem segredo de cliente. Envie token e client_id no corpo de formulário codificado em URL.Corpo da requisição
string
obrigatório
Um token de acesso ou de atualização MCP emitido. Strings de token desconhecidas são aceitas sem revelar se um token existe.Comprimento mínimo: 1. Comprimento máximo: 256. Padrão:
^[^\u0000-\u001F\u007F]+$.string
obrigatório
O client_id associado ao token. Um escalar ausente ou malformado é rejeitado; um cliente desconhecido ou não correspondente retorna sucesso.Comprimento mínimo: 1. Comprimento máximo: 2048. Padrão:
^[^\u0000-\u001F\u007F]+$.field
Dica padrão opcional. Esta implementação ignora este campo e não valida seu valor; os prefixos dos tokens determinam a família do token.
Esquema técnico
Esquema técnico
{
"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
}
Exemplos de requisição
Siga a codificação e a autenticação documentadas para esta rota. O formato de resposta e as regras de idempotência da API de ações se aplicam apenas às chamadas de ações.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'
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());
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)
Resposta
Um objeto JSON vazio. Tokens desconhecidos, associações incorretas de cliente e conexões já revogadas também retornam HTTP 200.HTTP 200
{}
Cabeçalhos da resposta
{
"Cache-Control": "no-store",
"Pragma": "no-cache"
}
Notas da operação
- Parâmetros escalares reconhecidos devem ser fornecidos uma única vez como strings não vazias, sem caracteres de controle ASCII ou DEL. Campos de consulta/formulário repetidos são decodificados como arrays e rejeitados quando lidos como escalares.
- Use application/x-www-form-urlencoded. Requisições JSON são rejeitadas com invalid_request.
- Revogar um token de acesso ou refresh token reconhecido revoga toda a conexão e apaga seu refresh token ativo; a revogação não se limita ao token fornecido.
- O parâmetro resource não é obrigatório nem verificado nesta rota. token_type_hint e outros campos não reconhecidos são ignorados.
- O endpoint não busca primeiro o registro de um cliente. Um client_id desconhecido bem formado, um client_id incorreto para o token ou um token desconhecido retorna {} sem revelar a validade do token.
- O limite público de revogação é de 60 requisições por minuto por IP de cliente, compartilhado entre os workers. Corpos codificados como URL são limitados a 32 KiB.
- O client_id retornado pelo registro dinâmico ou a URL HTTPS pública exata do documento de metadados do cliente.
Erros
| Status HTTP | Código | Significado ou recuperação |
|---|---|---|
| 400 | invalid_request | O corpo ou um parâmetro reconhecido é inválido, está ausente, está duplicado ou tem a codificação errada. |
| 413 | REQUEST_TOO_LARGE | A requisição excede o tamanho permitido do corpo. JSON é limitado a 1 MiB e formulários codificados em URL a 32 KiB. |
| 415 | UNSUPPORTED_CONTENT_TYPE | O parser de corpo da integração aceita apenas JSON ou formulários codificados em URL. A rota pode exigir especificamente uma dessas codificações. |
| 429 | temporarily_unavailable | O limite de requisições OAuth públicas foi atingido. Aguarde a janela atual antes de tentar novamente. |
| 500 | server_error | A autorização está temporariamente indisponível. Tente novamente mais tarde. |
Esta página foi útil?

