Release API

Release API를 사용하여 보도자료를 기자에게 배포할 수 있습니다. 상품 선택, 카테고리 타겟팅, 배포 생성/조회를 지원합니다.

인증

모든 API 요청에는 PULITZER-API-KEY 헤더에 API 키가 필요합니다.

헤더 설정

PULITZER-API-KEY: YOUR_API_KEY

배포 플로우

배포 생성은 아래 순서를 따릅니다:

  1. 상품 목록 조회 (GET /products)
  2. 카테고리 목록 조회 (GET /categories)
  3. 최적 배포 시간 조회 (GET /optimal-time) - 선택
  4. 배포 생성 (POST /create)
curl -X GET "https://api.pulitzer.ai/live/openapi/release/products" \
  -H "PULITZER-API-KEY: YOUR_API_KEY"

배포 상품 목록

배포 상품(가격, 기자 수 등)을 조회합니다. 배포 생성 시 product_id를 선택합니다. 표시 가격은 부가세 별도입니다.

GET https://api.pulitzer.ai/live/openapi/release/products

Query Parameters

파라미터타입필수설명
country_codestringNo국가 코드 (kr, id, ph, sg, my, reg_na). 기본값: kr

응답

{
  "status": "SUCCESS",
  "success": true,
  "message": "배포 상품 목록 조회 성공",
  "data": [
    {
      "id": 1,
      "title": "베이직",
      "description": "100명 기자 대상 배포",
      "price": 55000,
      "currency": "KRW",
      "release_count": 100,
      "release_tiers": "basic",
      "is_recommended": false
    }
  ]
}
curl -X GET "https://api.pulitzer.ai/live/openapi/release/products?country_code=kr" \
  -H "PULITZER-API-KEY: YOUR_API_KEY"

배포 카테고리 목록

배포 대상 카테고리를 조회합니다. 배포 생성 시 카테고리를 선택하면 해당 분야 기자들에게 발송됩니다.

GET https://api.pulitzer.ai/live/openapi/release/categories

응답

{
  "status": "SUCCESS",
  "success": true,
  "data": [
    {
      "id": 1,
      "name": "IT/과학",
      "categories": [
        {
          "id": 1,
          "name": "AI/머신러닝",
          "reporter_count": 245
        },
        {
          "id": 2,
          "name": "모바일",
          "reporter_count": 189
        }
      ]
    }
  ]
}
curl -X GET "https://api.pulitzer.ai/live/openapi/release/categories" \
  -H "PULITZER-API-KEY: YOUR_API_KEY"

배포 생성

보도자료를 기자에게 배포합니다. 선택한 상품의 가격에 부가세(10%)를 포함한 금액만큼 API 크레딧이 차감됩니다.

POST https://api.pulitzer.ai/live/openapi/release/create

Request Body Parameters

파라미터타입필수설명
press_idintegerYes보도자료 ID
product_idintegerYes배포 상품 ID (GET /products에서 조회)
release_category_idsinteger[]Yes배포 카테고리 ID 목록 (1개 이상)
release_methodstringYesIMMEDIATE (즉시배포) 또는 EXPERT_EDIT (전문가 첨삭)
email_titlestringYes이메일 제목
email_contentstringYes이메일 내용 (서문)
scheduled_kststringNo예약 배포 시간 (ISO 8601). 미입력시 즉시 배포
country_codestringNo국가 코드 (kr, id, ph, sg, my, reg_na). 기본값: kr
include_crm_reportersbooleanNoCRM 배포 대상 기자 포함 여부. 기본값: false

응답

{
  "status": "SUCCESS",
  "success": true,
  "message": "배포가 생성되었습니다.",
  "data": {
    "release_id": 456,
    "press_id": 123,
    "product_title": "베이직",
    "price": 55000,
    "currency": "KRW",
    "reporter_count": 98,
    "release_method": "IMMEDIATE",
    "status": "SENT",
    "scheduled_kst": null
  }
}
curl -X POST "https://api.pulitzer.ai/live/openapi/release/create" \
  -H "PULITZER-API-KEY: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "press_id": 123,
    "product_id": 1,
    "release_category_ids": [1, 3, 5],
    "release_method": "IMMEDIATE",
    "email_title": "퓰리처AI, 보도자료 배포 API 출시",
    "email_content": "안녕하세요, 퓰리처AI입니다...",
    "country_code": "kr",
    "include_crm_reporters": true
  }'

최적 배포 시간 조회

최적의 보도자료 배포 시간을 조회합니다. 오전 8~10시 사이 30분 단위 슬롯을 추천합니다.

GET https://api.pulitzer.ai/live/openapi/release/optimal-time

응답

{
  "status": "SUCCESS",
  "success": true,
  "data": {
    "optimal_time": "2026-05-28T08:00:00+09:00",
    "optimal_time_str": "2026.05.28. 오전 8시"
  }
}
curl -X GET "https://api.pulitzer.ai/live/openapi/release/optimal-time" \
  -H "PULITZER-API-KEY: YOUR_API_KEY"

배포 이력 조회

보도자료 배포 이력을 페이지네이션으로 조회합니다.

GET https://api.pulitzer.ai/live/openapi/release/history

Query Parameters

파라미터타입설명
pageinteger페이지 번호 (기본값: 1)
page_sizeinteger페이지 크기 (1~100, 기본값: 20)
sortstring정렬 (DESC/ASC, 기본값: DESC)
keywordstring검색어 (보도자료 제목)

응답

{
  "status": "SUCCESS",
  "success": true,
  "data": [
    {
      "release_id": 456,
      "press_id": 123,
      "press_title": "퓰리처AI 보도자료 배포 API 출시",
      "subject": "퓰리처AI, 보도자료 배포 API 출시",
      "from_name": "김철수",
      "reporter_count": 98,
      "status": "SENT",
      "is_paid": true,
      "created_kst": "2026-05-27T10:30:00",
      "sent_kst": "2026-05-27T10:30:05"
    }
  ],
  "page_count": 3,
  "total_count": 52
}
curl -X GET "https://api.pulitzer.ai/live/openapi/release/history?page=1&page_size=20&sort=DESC" \
  -H "PULITZER-API-KEY: YOUR_API_KEY"

최근 배포 상태 조회

최근 배포 요청의 상태를 간략히 조회합니다.

GET https://api.pulitzer.ai/live/openapi/release/status

Query Parameters

파라미터타입설명
limitinteger조회 건수 (1~50, 기본값: 10)
curl -X GET "https://api.pulitzer.ai/live/openapi/release/status?limit=10" \
  -H "PULITZER-API-KEY: YOUR_API_KEY"

배포 상세 조회

특정 배포건의 상세 정보(수신 기자, 상태 등)를 조회합니다.

GET https://api.pulitzer.ai/live/openapi/release/{release_id}

응답

{
  "status": "SUCCESS",
  "success": true,
  "data": {
    "release_id": 456,
    "press_id": 123,
    "press_title": "퓰리처AI 보도자료 배포 API 출시",
    "subject": "퓰리처AI, 보도자료 배포 API 출시",
    "from_name": "김철수",
    "introduction": "안녕하세요...",
    "contact": "cs@company.com",
    "reporters": [
      {
        "id": 1,
        "name": "기자1",
        "email": "re***",
        "media": "매체A"
      }
    ],
    "reporter_count": 98,
    "status": "SENT",
    "is_paid": true,
    "product_id": 1,
    "payment_price": 55000,
    "payment_currency": "KRW",
    "release_method": "IMMEDIATE",
    "created_kst": "2026-05-27T10:30:00",
    "sent_kst": "2026-05-27T10:30:05",
    "scheduled_kst": null
  }
}
curl -X GET "https://api.pulitzer.ai/live/openapi/release/42" \
  -H "PULITZER-API-KEY: YOUR_API_KEY"

서문 AI 생성

배포용 서문(이메일 본문 앞부분)을 AI로 생성합니다. 발신자 정보를 제공하면 변수를 실제 값으로 대체합니다.

POST https://api.pulitzer.ai/live/openapi/release/{press_id}/introduction

Request Body Parameters

파라미터타입필수설명
sender_namestringNo발신자 이름
sender_titlestringNo발신자 직책
sender_contactstringNo발신자 연락처
company_namestringNo회사명

과금

AI 생성 크레딧 1,000원 차감

응답

{
  "status": "SUCCESS",
  "success": true,
  "data": {
    "introduction": "안녕하세요, 김철수 PR팀장입니다...",
    "press_id": 123
  }
}
curl -X POST "https://api.pulitzer.ai/live/openapi/release/123/introduction" \
  -H "PULITZER-API-KEY: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "sender_name": "김철수",
    "sender_title": "PR팀장",
    "sender_contact": "cs@company.com",
    "company_name": "주식회사 테크"
  }'

에러 응답

발생 가능한 에러 코드입니다.

HTTP StatusError Code설명
400PRODUCT_NOT_FOUND상품이 존재하지 않음
400WRONG_PRODUCT_KIND배포 상품이 아닌 상품 선택
400PRODUCT_INACTIVE비활성 상품
400INVALID_CATEGORY유효하지 않은 카테고리 ID
400INVALID_SCHEDULE잘못된 예약 시간 형식
402INSUFFICIENT_API_CREDITAPI 크레딧 부족
403NOT_AUTHORIZED보도자료 접근 권한 없음
404PRESS_NOT_FOUND보도자료가 존재하지 않음