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 및 MCP 프로토콜
MCP OAuth 연결 철회
연결의 액세스 토큰 또는 갱신 토큰 중 하나와 등록된 client_id를 사용하여 연결을 철회합니다.
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)
연결의 액세스 토큰 또는 갱신 토큰 중 하나와 등록된 client_id를 사용하여 연결을 철회합니다.
POST https://api.voicecheap.ai/oauth/revoke
인증
클라이언트 시크릿은 없습니다. token과 client_id를 URL 인코딩된 폼 본문으로 보내세요.요청 본문
string
필수
발급된 MCP 액세스 또는 갱신 토큰입니다. 알 수 없는 토큰 문자열도 허용되며 토큰의 존재 여부는 공개하지 않습니다.최소 길이: 1. 최대 길이: 256. 패턴:
^[^\u0000-\u001F\u007F]+$.string
필수
토큰과 연결된 client_id입니다. 스칼라가 누락되거나 형식이 잘못되면 거부됩니다. 알 수 없거나 일치하지 않는 클라이언트는 성공을 반환합니다.최소 길이: 1. 최대 길이: 2048. 패턴:
^[^\u0000-\u001F\u007F]+$.field
선택 사항인 표준 힌트입니다. 이 구현은 해당 필드를 무시하며 값을 검증하지 않습니다. 토큰 계열은 토큰 접두사로 결정됩니다.
기술 스키마
기술 스키마
{
"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
}
요청 예제
이 경로에 명시된 인코딩 및 인증 방식을 따르세요. 액션 API의 응답 구조와 멱등성 규칙은 액션 호출에만 적용됩니다.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)
응답
빈 JSON 객체입니다. 알 수 없는 토큰, 잘못 연결된 클라이언트 및 이미 철회된 연결에 대해서도 HTTP 200을 반환합니다.HTTP 200
{}
응답 헤더
{
"Cache-Control": "no-store",
"Pragma": "no-cache"
}
작업 참고 사항
- 인식되는 스칼라 매개변수는 ASCII 제어 문자나 DEL이 없는 비어 있지 않은 문자열로 한 번만 제공해야 합니다. 반복된 쿼리/폼 필드는 배열로 디코딩되며, 스칼라로 읽을 때 거부됩니다.
- application/x-www-form-urlencoded를 사용하세요. JSON 요청은 invalid_request로 거부됩니다.
- 인식되는 액세스 토큰 또는 갱신 토큰 중 하나를 취소하면 전체 연결이 취소되고 해당 연결의 활성 갱신 토큰이 삭제됩니다. 제공된 토큰 하나에만 한정되지 않습니다.
- 이 경로에서는 resource 매개변수가 필수가 아니며 확인하지 않습니다. token_type_hint 및 인식되지 않는 다른 필드는 무시됩니다.
- 엔드포인트는 먼저 클라이언트 등록 정보를 조회하지 않습니다. 형식은 올바르지만 알 수 없는 client_id, 해당 토큰과 맞지 않는 client_id 또는 알 수 없는 토큰은 토큰의 유효성을 드러내지 않고 {}를 반환합니다.
- 공개 철회 엔드포인트의 한도는 클라이언트 IP당 분당 60회 요청이며 워커 간에 공유됩니다. URL 인코딩된 본문은 32 KiB로 제한됩니다.
- 동적 등록에서 반환한 client_id 또는 클라이언트 메타데이터 문서의 정확한 공개 HTTPS URL입니다.
오류
| HTTP 상태 | 코드 | 의미 또는 복구 방법 |
|---|---|---|
| 400 | invalid_request | 본문 또는 인식된 매개변수가 유효하지 않거나, 누락되었거나, 중복되었거나, 인코딩이 잘못되었습니다. |
| 413 | REQUEST_TOO_LARGE | 요청이 허용된 본문 크기를 초과합니다. JSON은 1 MiB, URL 인코딩된 양식은 32 KiB로 제한됩니다. |
| 415 | UNSUPPORTED_CONTENT_TYPE | 통합 본문 파서는 JSON 또는 URL 인코딩된 폼만 받습니다. 경로에 따라 이 인코딩 중 하나만 요구할 수 있습니다. |
| 429 | temporarily_unavailable | 공개 OAuth 요청 속도 제한에 도달했습니다. 현재 제한 시간 구간이 끝날 때까지 기다린 후 다시 시도하세요. |
| 500 | server_error | 일시적으로 권한 부여를 사용할 수 없습니다. 나중에 다시 시도하세요. |
이 페이지가 도움이 되었나요?

