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 i protokół MCP
Unieważnij połączenie OAuth MCP
Unieważnij połączenie, używając jednego z jego tokenów dostępu lub odświeżania oraz zarejestrowanego 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)
Unieważnij połączenie, używając jednego z jego tokenów dostępu lub odświeżania oraz zarejestrowanego client_id.
POST https://api.voicecheap.ai/oauth/revoke
Uwierzytelnianie
Brak sekretu klienta. Wyślij token i client_id w treści formularza URL-encoded.Treść żądania
string
wymagane
Wydany token dostępu lub odświeżania MCP. Nieznane ciągi tokenów są akceptowane bez ujawniania, czy dany token istnieje.Minimalna długość: 1. Maksymalna długość: 256. Wzorzec:
^[^\u0000-\u001F\u007F]+$.string
wymagane
client_id powiązany z tokenem. Brakująca lub nieprawidłowo sformatowana wartość skalarna jest odrzucana; nieznany lub niepasujący klient skutkuje odpowiedzią oznaczającą powodzenie.Minimalna długość: 1. Maksymalna długość: 2048. Wzorzec:
^[^\u0000-\u001F\u007F]+$.field
Opcjonalna standardowa wskazówka. Ta implementacja ignoruje to pole i nie sprawdza jego wartości; rodzinę tokenu określają jego prefiksy.
Schemat techniczny
Schemat techniczny
{
"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
}
Przykłady żądań
Stosuj udokumentowany sposób kodowania i uwierzytelniania dla tej ścieżki. Struktura odpowiedzi i reguły idempotencji API akcji dotyczą wyłącznie wywołań akcji.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)
Odpowiedź
Pusty obiekt JSON. Nieznane tokeny, nieprawidłowe powiązania z klientem i już unieważnione połączenia również zwracają HTTP 200.HTTP 200
{}
Nagłówki odpowiedzi
{
"Cache-Control": "no-store",
"Pragma": "no-cache"
}
Uwagi do operacji
- Rozpoznawane parametry skalarne muszą być podane jednokrotnie jako niepuste ciągi znaków bez znaków sterujących ASCII ani DEL. Powtórzone pola zapytania lub formularza są dekodowane jako tablice i odrzucane przy odczycie jako wartości skalarne.
- Użyj application/x-www-form-urlencoded. Żądania JSON są odrzucane z invalid_request.
- Unieważnienie rozpoznanego tokenu dostępu lub tokenu odświeżania unieważnia całe połączenie i usuwa jego aktywny token odświeżania; nie ogranicza się do jednego podanego tokenu.
- Parametr resource nie jest wymagany ani sprawdzany na tej trasie. token_type_hint i inne nierozpoznane pola są ignorowane.
- Punkt końcowy nie pobiera najpierw rejestracji klienta. Poprawnie sformatowany nieznany client_id, błędny client_id dla tokenu lub nieznany token zwraca {} bez ujawniania ważności tokenu.
- Publiczny limit unieważniania wynosi 60 żądań na minutę na adres IP klienta i jest współdzielony przez procesy robocze. Treść żądań zakodowana w formacie URL jest ograniczona do 32 KiB.
- client_id zwrócony przez rejestrację dynamiczną lub dokładny publiczny adres HTTPS dokumentu metadanych klienta.
Błędy
| Status HTTP | Kod | Znaczenie lub sposób rozwiązania |
|---|---|---|
| 400 | invalid_request | Treść żądania lub rozpoznany parametr są nieprawidłowe, nieobecne, zduplikowane lub mają niewłaściwe kodowanie. |
| 413 | REQUEST_TOO_LARGE | Żądanie przekracza dozwolony rozmiar treści. Limit dla JSON wynosi 1 MiB, a dla formularzy zakodowanych w URL — 32 KiB. |
| 415 | UNSUPPORTED_CONTENT_TYPE | Parser treści integracji przyjmuje wyłącznie JSON lub formularze URL-encoded. Dana trasa może wymagać konkretnego z tych kodowań. |
| 429 | temporarily_unavailable | Osiągnięto publiczny limit częstotliwości żądań OAuth. Przed ponowieniem poczekaj na zakończenie bieżącego okna. |
| 500 | server_error | Autoryzacja jest tymczasowo niedostępna. Spróbuj ponownie później. |
Czy ta strona była pomocna?

