누리보드는 REST API v1을 제공합니다. 모든 API 요청은 Bearer 토큰 인증이 필요하며, 응답은 JSON 형식입니다.
Base URL
https://yourdomain.com/api/v1
인증 방식
Authorization: Bearer {api_key}
API 키는 로그인 후 발급받을 수 있습니다.
API 키 관리
API 키 발급
POST /api/v1/key/generate
파라미터 필수 설명
name X API 키 이름
응답:
{ "api_key": "발급된_키" }
API 키 삭제
POST /api/v1/key/delete
파라미터 필수 설명
id O 삭제할 키 ID
회원 API
내 정보 조회
GET /api/v1/me
응답:
{
"id": 1,
"user_id": "admin",
"nickname": "관리자",
"level": 10,
"point": 500
}
게시판 API
게시판 목록
GET /api/v1/boards
응답:
[
{
"board_id": "free",
"title": "자유게시판",
"description": "자유롭게 글을 작성하세요",
"board_type": "normal"
}
]
게시글 API
글 목록 조회
GET /api/v1/posts
파라미터 필수 기본값 설명
board_id X - 특정 게시판 글만 조회
page X 1 페이지 번호
limit X 20 페이지당 글 수 (최대 50)
글 상세 조회
GET /api/v1/posts/{id}
응답:
{
"post": {
"id": 1,
"board_id": "free",
"title": "제목",
"content": "내용",
"nickname": "작성자",
"hit": 10,
"vote_up": 3,
"vote_down": 0,
"created_at": "2026-04-12 12:00:00"
},
"attachments": [
{
"id": 1,
"orig_name": "파일명.jpg",
"file_size": 102400,
"is_image": 1
}
]
}
글 작성
POST /api/v1/posts
파라미터 필수 설명
board_id O 게시판 코드
title O 제목
content X 내용
category X 카테고리
tags X 태그
link1 X 링크1
link2 X 링크2
응답 (201):
{
"post_id": 15,
"url": "/board/free/15"
}
댓글 API
댓글 작성
POST /api/v1/comments
파라미터 필수 기본값 설명
post_id O - 글 ID
content O - 댓글 내용
parent_id X 0 부모 댓글 ID (대댓글)
응답 (201):
{ "comment_id": 42 }
북마크 / 알림 API
북마크 토글
POST /api/bookmark
파라미터 필수 설명
post_id O 글 ID
응답:
{ "bookmarked": true }
알림 조회
POST /api/notifications
응답:
{
"notifications": [...],
"unread": 3
}
알림 모두 읽음
POST /api/notifications/read
마켓 API (인증 불필요)
플러그인 목록
GET /api/v1/market/plugins
파라미터 필수 설명
type X all / free / paid
search X 검색어
플러그인 다운로드
GET /api/v1/market/download/{id}
Webhook
외부 서비스(Discord, Slack 등)와 연동할 수 있습니다. 관리자에서 Webhook URL을 등록하면 이벤트 발생 시 자동으로 POST 요청을 보냅니다.
지원 이벤트
이벤트 설명
member.registered 회원가입 시
post.created 게시글 작성 시
요청 형식
POST {webhook_url}
Content-Type: application/json
X-Webhook-Secret: {설정한 시크릿}
{
"event": "post.created",
"data": {
"post_id": 15,
"board_id": "free",
"title": "제목",
...
}
}
에러 응답
{
"error": "에러 메시지",
"code": 401
}
코드 설명
401 인증 실패 (API 키 누락/만료)
403 권한 없음
404 리소스 없음
422 필수 파라미터 누락
Core 클래스 레퍼런스
개발자가 플러그인이나 테마에서 사용할 수 있는 주요 클래스입니다.
DB (데이터베이스)
DB::fetch($sql, $params) // 단건 조회
DB::fetchAll($sql, $params) // 다중 조회
DB::insert($table, $data) // 삽입 → lastInsertId
DB::update($table, $data, $where, $params) // 수정
DB::delete($table, $where, $params) // 삭제
DB::count($table, $where, $params) // 행 수
Auth (인증)
Auth::check() // 로그인 여부 → bool
Auth::user() // 현재 회원 정보 → array
Auth::id() // 현재 회원 ID → int
Auth::isAdmin() // 관리자 여부 → bool
Auth::level() // 현재 회원 등급 → int
Auth::requireLogin() // 로그인 강제
Auth::requireAdmin() // 관리자 강제
Auth::csrfToken() // CSRF 토큰 생성
Auth::verifyCsrf() // CSRF 검증
Auth::csrfField() // hidden input HTML
Member (회원)
Member::find($id) // ID로 조회
Member::findByUserId($userId) // user_id로 조회
Member::register($data) // 회원가입
Member::update($id, $data) // 정보 수정
Member::addWarning($id, $reason) // 경고 부여
Member::ban($id, $days) // 정지
Member::unban($id) // 정지 해제
Post (게시글)
Post::find($id) // 글 조회
Post::create($data) // 글 작성
Post::update($id, $data) // 글 수정
Post::delete($id) // 글 삭제
Post::list($boardId, $page, $perPage, $search, $category) // 목록
Post::recentPosts($limit, $boardId) // 최근 글
Post::galleryPosts($limit, $boardId) // 갤러리 글
Comment (댓글)
Comment::create($data) // 댓글 작성
Comment::delete($id) // 댓글 삭제
Comment::listByPost($postId) // 댓글 목록 (대댓글 포함)
Board (게시판)
Board::findById($boardId) // board_id로 조회
Board::create($data) // 게시판 생성
Board::listAll($activeOnly) // 게시판 목록
Upload (파일)
Upload::upload($file, $postId) // 파일 업로드
Upload::uploadEditorImage($file) // 에디터 이미지
Upload::listByPost($postId) // 첨부파일 목록
Upload::formatSize($bytes) // 크기 포맷 (KB/MB)
Point (포인트)
Point::give($memberId, $point, $reason) // 포인트 지급
Point::history($memberId, $page, $perPage) // 포인트 내역
Level (등급)
Level::find($level) // 등급 정보
Level::getIcon($level, $title) // 등급 아이콘 HTML
Level::checkAndUpgrade($memberId) // 자동 등업 확인
Level::canWrite($level) // 글쓰기 권한
Level::canComment($level) // 댓글 권한
SEO
SEO::setTitle($title) // 페이지 제목
SEO::setDescription($desc) // 메타 설명
SEO::setArticle($post, $author) // Article 구조화 데이터
SEO::setBreadcrumb($items) // Breadcrumb
SEO::render() // 메타태그 HTML 출력
Plugin (플러그인)
Plugin::addHook($hook, $callback, $priority) // 훅 등록
Plugin::doHook($hook, ...$args) // 훅 실행
Plugin::addFilter($filter, $callback, $priority) // 필터 등록
Plugin::applyFilter($filter, $value, ...$args) // 필터 적용
사용 가능한 훅
훅 이름 실행 시점
after_header 헤더 출력 후
before_content 본문 출력 전
after_content 본문 출력 후
before_post_content 게시글 본문 전
after_post_content 게시글 본문 후
after_footer 푸터 출력 후
body_end body 태그 닫기 전
post.created 글 작성 시
comment.created 댓글 작성 시
사용 가능한 필터
필터 이름 대상
post_title 글 제목
post_content 글 내용
comment_content 댓글 내용
theme_view_file 테마 파일 경로
Cache (캐시)
Cache::get($key) // 캐시 조회
Cache::set($key, $value, $ttl) // 캐시 저장 (초)
Cache::delete($key) // 캐시 삭제
Cache::remember($key, $ttl, $callback) // 없으면 생성
Message (쪽지)
Message::send($senderId, $receiverId, $title, $content) // 발송
Message::inbox($memberId, $page, $perPage) // 받은함
Message::outbox($memberId, $page, $perPage) // 보낸함
Message::unreadCount($memberId) // 안 읽은 수
Social (소셜 로그인)
Social::kakaoAuthUrl() // 카카오 로그인 URL
Social::naverAuthUrl() // 네이버 로그인 URL
Social::googleAuthUrl() // 구글 로그인 URL
Social::linkedAccounts($memberId) // 연동된 계정 목록
admin
댓글 0
댓글을 작성하려면 로그인하세요.