Write an Architecture Decision Record (ADR) document for a technical decision. Use when documenting a technical choice, architectural decision, or design decision.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
REST API design conventions for this codebase. Use when writing or reviewing API endpoints, route definitions, response formatting, or client code that calls the API.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
설치 방법 보기설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
These conventions apply to every API endpoint in this codebase. Follow them exactly. If a new situation requires deviation, document the reason in a code comment.
Pattern: /api/v{major}/{resource}
/api/v1/users, /api/v1/billing-accounts/api/v1/users/{id}/sessions/api/v1/users/{id} with DELETE, not /api/v1/delete-user/{id}?page-size=20&sort-by=created-at| Method | Meaning | Success status |
|---|---|---|
| GET | Retrieve resource(s), no side effects | 200 |
| POST | Create a new resource | 201 |
| PUT | Replace a resource entirely | 200 |
| PATCH | Partially update a resource | 200 |
| DELETE | Delete a resource | 204 (no body) |
Use GET for all read operations. Do not use POST for reads.
All successful responses (except 204) use this envelope:
{
"data": <resource or array of resources>,
"meta": {
"timestamp": "<ISO 8601 UTC>",
"version": "<API minor version string, e.g. 1.4>"
}
}
For list responses, meta also includes pagination fields:
{
"data": [...],
"meta": {
"timestamp": "2024-11-01T14:30:00Z",
"version": "1.4",
"next_cursor": "<opaque cursor string or null>",
"limit": 20,
"count": 20
}
}
count is the number of items in the current page, not the total across all pages. Do not include a total count unless explicitly required, as it forces an expensive COUNT query.
All error responses use this envelope:
{
"error": {
"code": "SNAKE_CASE_ERROR_CODE",
"message": "Human-readable description safe for end users.",
"details": {}
}
}
code is a stable machine-readable identifier in SCREAMING_SNAKE_CASEmessage is safe for end users — do not include stack traces, SQL, or internal pathsdetails carries structured field-level information for validation errors:{
"error": {
"code": "VALIDATION_FAILED",
"message": "One or more fields failed validation.",
"details": {
"fields": [
{ "field": "email", "message": "Must be a valid email address." },
{ "field": "birth_date", "message": "Must be in the past." }
]
}
}
}
| Code | Use |
|---|---|
| 200 | Successful GET, PUT, PATCH |
| 201 | Successful POST (resource created) |
| 204 | Successful DELETE (no body) |
| 400 | Malformed request (bad JSON, wrong content-type) |
| 401 | Not authenticated — missing or invalid token |
| 403 | Authenticated but not authorized for this resource |
| 404 | Resource not found |
| 409 | Conflict — resource already exists, optimistic lock conflict |
| 422 | Validation failed — request is well-formed but semantically invalid |
| 429 | Rate limited — include Retry-After header |
| 500 | Unexpected server error |
| 503 | Service temporarily unavailable — include Retry-After header |
Do not use 400 for validation errors — use 422. Do not use 500 for expected error cases that have a more specific code.
All protected endpoints require a Bearer token in the Authorization header:
Authorization: Bearer <token>
The token is validated by the auth middleware before the handler runs. Handlers do not validate tokens directly. If the middleware passes, request.user (or the framework equivalent) is populated with the authenticated user's identity.
Use cursor-based pagination, not offset-based.
Request parameters:
cursor: opaque cursor string from the previous page's next_cursor (absent on first page)limit: number of items to return, default 20, maximum 100Response meta fields:
next_cursor: cursor to pass for the next page, or null if this is the last pagelimit: the limit used for this pagecount: number of items returned in this pageDo not expose integer offsets or page numbers in the public API.
/api/v1/, /api/v2/X-API-Version: 1.4아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
Write an Architecture Decision Record (ADR) document for a technical decision. Use when documenting a technical choice, architectural decision, or design decision.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Automatically format code files after every edit using Prettier and ESLint. Active in the background whenever Claude edits a file. Formatting is silent — no prompts, no output unless a formatter fails. Use when you want consistent formatting enforced automatically during a coding session.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Create a git branch named after a GitHub issue.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Draft a CHANGELOG.md entry for the current changes in Keep a Changelog format. Use when releasing, tagging a version, or updating CHANGELOG.md.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Draft the changelog entry for all unreleased commits in Keep a Changelog format. Groups commits into Added, Changed, Fixed, Removed, and Security. Use before releasing a new version or when updating CHANGELOG.md.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Run a comprehensive code quality audit covering security, performance, and maintainability. Use for quarterly audits, pre-release reviews, or when onboarding to a large codebase.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.