# 키 세 종류

`get_project_keys`가 셋을 줘요. 쓰임이 다르고, 잘못 두면 사고가 나요.

| 키 | 어디에 | 무엇을 |
|---|---|---|
| 공개 키 (publishable) | 브라우저·앱에 넣어도 됨 | 접근 규칙이 허용하는 것만 |
| 비밀 키 (secret) | **서버에만** | 접근 규칙을 전부 우회 |
| 접근 토큰 (PAT) | 이 MCP 서버와 관리 API | 프로젝트를 만들고 지움 |

## 용도별 키

`get_project_keys`의 두 키는 하나로 묶여 있어서, 하나가 새면 둘 다 바꿔야 해요.
서버마다·앱마다 따로 쓰려면 `create_api_key`로 이름 붙은 키를 만드세요.
`bw_publishable_…`는 공개 키, `bw_secret_…`는 비밀 키와 같은 권한이에요.
`list_api_keys`가 마지막으로 쓴 시각을 보여 주니, 안 쓰는 키는 `revoke_api_key`로 하나씩 폐기하세요.

## 키가 샜을 때

```
get_jwt_signing      서명 방식(HS256 | ES256)과 아직 받아 주는 예전 키
rotate_signing_key   공개 키·비밀 키를 서명하는 키를 새로 (grace_hours: 0, 1, 24, 168)
retire_signing_key   유예 중인 예전 키를 지금 끝내기
set_jwt_signing      로그인 토큰을 ES256으로 (다른 서버가 공개 키로 확인)
```

`rotate_signing_key`는 `get_project_keys`의 두 키를 **모두** 바꿔요. 앱에 넣은 키를 전부 옮겨야 하니
샜을 때는 `grace_hours: 0`, 계획된 교체라면 옮길 시간만큼 유예를 두세요. 소유자·관리자만 할 수 있어요.
`grace_hours: 0`(또는 비움)이면 `confirm`에 프로젝트 이름을 그대로 넣어야 해요.
프런트엔드 코드에 넣을 값만 필요하면 `get_project_keys { ref, only: "publishable" }`로 주소와 공개 키만 받으세요.

## 절대 하지 말 것

비밀 키를 브라우저 코드·모바일 앱·공개 저장소에 넣지 마세요.
그 키는 모든 표를 규칙 없이 읽고 써요.
프런트엔드에 넣는 키는 언제나 공개 키예요.

## 주소

프로젝트 API는 `https://<ref>.<zone>` 이에요. `get_project_keys`가 함께 알려줘요.

```
GET  https://<ref>.<zone>/rest/v1/notes?select=*     apikey: <공개 키>
POST https://<ref>.<zone>/auth/v1/signup             apikey: <공개 키>
```

---

https://end.blackall.ai/docs/keys?lang=ko
