---
title: 토큰 폐기
description: POST /v2/oauth-apps/revoke 로 액세스 토큰을 폐기해 고객 워크스페이스와의 연결을 끊는 방법이에요.
sidebar:
  order: 3
  badge: POST
---

```http
POST /v2/oauth-apps/revoke
```

고객이 파트너 서비스에서 페이싱크 연동을 해제하면 토큰을 폐기하세요. 요청 형식은 OAuth 2.0 토큰 폐기(RFC 7009)를 따라요.

## 요청 본문

본문은 `application/x-www-form-urlencoded`예요.

| 파라미터 | 타입 | 필수 | 설명 |
| --- | --- | --- | --- |
| `token` | string | 예 | 폐기할 액세스 토큰(`oat_...`)이에요. |
| `client_id` | string | | 앱 ID(`oap_...`)예요. HTTP Basic 인증을 쓰지 않을 때 넣어요. |
| `client_secret` | string | | 클라이언트 시크릿(`oas_...`)이에요. HTTP Basic 인증을 쓰지 않을 때 넣어요. |

클라이언트 인증은 [토큰 발급](/partners/oauth/token#클라이언트-인증)과 같아요.

## 요청 예시

```bash cURL
curl -X POST https://api.paysync.kr/v2/oauth-apps/revoke \
  -u "$PAYSYNC_CLIENT_ID:$PAYSYNC_CLIENT_SECRET" \
  -d token="$PAYSYNC_ACCESS_TOKEN"
```

```js Node.js
const res = await fetch("https://api.paysync.kr/v2/oauth-apps/revoke", {
  method: "POST",
  headers: {
    Authorization: "Basic " + Buffer.from(`${clientId}:${clientSecret}`).toString("base64"),
  },
  body: new URLSearchParams({ token: accessToken }),
});
```

```python Python
import os
import requests

res = requests.post(
    "https://api.paysync.kr/v2/oauth-apps/revoke",
    auth=(os.environ["PAYSYNC_CLIENT_ID"], os.environ["PAYSYNC_CLIENT_SECRET"]),
    data={"token": access_token},
)
```

## 응답

클라이언트 인증에 성공하면 HTTP 200과 빈 객체가 와요.

```json title="200 OK"
{}
```

- 앱이 발급받은 토큰이면 그 워크스페이스와의 연결이 끊기고 토큰이 바로 멈춰요. 고객의 연결된 앱 화면에서도 사라져요.
- 이미 폐기했거나 모르는 토큰, 다른 앱의 토큰이어도 같은 응답이 와요. 아무 일도 하지 않아요.

오류는 `{ "error": "..." }` 형식이에요.

```json title="400 Bad Request · invalid_request"
{
  "error": "invalid_request"
}
```

```json title="401 Unauthorized · invalid_client"
{
  "error": "invalid_client"
}
```

## 오류

| HTTP | `error` | 발생 조건 |
| --- | --- | --- |
| 400 | `invalid_request` | 본문을 `application/x-www-form-urlencoded`로 읽을 수 없어요. |
| 401 | `invalid_client` | `client_id`나 `client_secret`이 없거나 틀렸어요. |
