누리보드는 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)  // 연동된 계정 목록