API 문서

정책 안내

  • 보도자료 수신
    한 번에 받을 수 있는 보도자료는 최대 100건 까지만 전송됩니다.
    5~10분 간격으로 뉴스와이어 API 서버에 접속해 보도자료를 수신하면 됩니다.
    장기간 수신하지 않은 경우, 과거 자료는 최대 1,000개 까지만 제공합니다.
  • 삭제 요청(delete)
    삭제 요청이 들어왔는데 제휴사 DB에 해당 자료가 없으면 무시하면 됩니다.
  • 수정 요청(update)
    수정 요청이 들어왔는데 제휴사 DB에 해당 자료가 없으면 insert 처리해야 합니다.
  • 사진 처리
    사진은 반드시 제공된 URL에서 다운받아야 합니다.
    다운로드한 사진은 자체 서버에 저장 후 서비스 해야합니다.(외부 URL 직접 링크 금지)

수신 방법 안내

뉴스와이어 보도자료 수신 방법에 대해 설명합니다.
보도자료 수신은 아래 그림과 같은 절차로 수신 할 수 있습니다.

보도자료 요청
/api/v1/request
보도자료 수신
/api/v1/send
보도자료 전송
결과 확인
/api/v1/send/{send_id}/status

보도자료 요청

보도자료를 수신하려면 먼저 뉴스와이어 API 서버에 보도자료 요청을 하고 인증과정을 거쳐 문제가 없을 경우 보도자료를 수신할 수 있는 request_id가 할당됩니다. request_id를 가지고 뉴스와이어 API 서버에서 접속하면 보도자료를 수신 할 수 있습니다.

만일 보도자료 요청 후 할당된 request_id로 보도자료를 수신하지 않고 보도자료를 다시 요청하며 이전에 생성된 요청정보가 그대로 전송됩니다.

보도자료 요청 시 Header에 Content-Type, X-HMAC, X-Timestamp 정보가 포함되어야 하며, 뉴스와이어에서 제공한 partner_id 값을 json 또는 post 형태로 전송해야 인증처리가 이루어 집니다.

API Header
항목 Mandatory 설명
Content-Type Mandatory 요청 Body Content Type을 application/json으로 지정 (POST)
X-HMAC Mandatory 발급받은 API Key와 sha256 해시 알고리즘을 이용해 생성
X-Timestamp Mandatory 1970년 1월 1일 00:00:00 협정 세계시(UTC)부터의 경과 시간을 밀리초(Millisecond)로 나타냄
API Gateway 서버와 시간 차가 5분 이상 나는 경우 유효하지 않은 요청으로 간주
API URL

POST https://www.newswire.co.kr/api/v1/request

요청 예시:
													JSON
													{
														"partner_id": 2002
													}
												
응답 예시:
													JSON
													{
														"partner_id": 2002,
														"request_id": "REQ-2002-20251118122311-123",
														"request_time": "2025-11-18T09:00:00+09:00",
														"matched_count": 8,
														"status": "processing",
														"statuscode": 200,
														"statusname": "success"
													}
												
응답 항목:
항목 Mandatory Type 설명
partner_id Mandatory integer 파트너사에 부여된 고유 아이디
request_id Mandatory string REQ-xxxx-YYYYmmddhhiiss-xxx 형식
보도자료 요청 ID
request_time Mandatory string ISO 8601 형식. 2025-11-28T10:26:08+09:00
보도자료 전송 요청 시각
matched_count Mandatory integer 전송가능한 보도자료 개수 (0 ~ 100개)
0: 전송할 보도자료 없음
status Mandatory string processing, completed (처리중, 처리완료)
statuscode Mandatory string - 200: 성공
- 그 외: 실패
statusname Mandatory string - success: 성공
- fail: 실패
error Optional string 에러 발생시 에러 메시지
  • matched_count 값이 0이면 status 값은 completed가 되며, 더 이상 수신할 보도자료 없다는 의미이니 보도자료 수신요청 할 필요가 없습니다.
  • status 값이 processing 인 경우만 전송할 보도자료 있는 상태를 의미 합니다.

보도자료 수신

  • 수신 요청
    보도자료 요청 시 발급받은 request_id를 사용해 뉴스와이어 API 서버에 수신 요청을 보냅니다.
    응답은 JSON 형식으로 전달됩니다.
  • send_id 발급 및 활용
    정상적으로 보도자료가 수신되면 send_id가 할당됩니다.
    send_id를 이용해:
    • 보도자료 수신 결과를 확인할 수 있습니다. (보도자료 수신 결과 확인 참고)
    • 보도자료가 사용된 URL을 뉴스와이어에 제공할 수 있습니다. (콜백 처리 참고)
    • send_id는 고유값이며, 제휴사 내부 문제 발생 시 해당 send_id로 다시 수신 요청이 가능합니다.
  • 응답 데이터 처리
    한 번의 응답에 포함된 보도자료는 최대 100개입니다.
    동일 보도자료(newsid)에 대해 insert, update, delete 이벤트가 여러 개 포함될 수 있습니다.
    반드시 위에서 아래 순서대로 이벤트를 처리해야 데이터 정합성이 유지됩니다.(제공된 pid가 작은 값부터 처리)
    press_time은 보도자료 노출시각입니다. 현재 시간보다 크다면 해당 보도자료는 노출되면 안됩니다.
    각 보도자료별 action값이 있으며 insert, update, delete가 있습니다.
    • insert : 새로운 데이터 저장
    • update: 기존 데이터 수정. 제휴사 DB에 newsid가 없으면 insert 처리
    • delete: 데이터 삭제. 제휴사 DB에 newsid가 없으면 무시
카테고리 정보:
  • https://www.newswire.co.kr/api/v1/categoryinfo
  • 카테고리 정보는 한번 수신 후 제휴사 DB에 저장 후 사용하시기 바랍니다.
  • 뉴스와이어 카테고리가 수정 될 수 있으니 최소 6개월 1회는 업데이트가 필요합니다.
API Header
항목 Mandatory 설명
Content-Type Mandatory 요청 Body Content Type을 application/json으로 지정 (POST)
API URL

POST https://www.newswire.co.kr/api/v1/send

요청 예시:
													JSON
													{
														"request_id": "REQ-2002-20250101010101-123"
													}
												
응답 예시:
													JSON
													{
														"send_id": "string",
														"send_time": "string",
														"status": "processing | completed",
														"statuscode": "integer",
														"statusname": "success | fail",
														"matched_count": "integer",
														"news": [
															{
																"pid": "integer",
																"newsid": "integer",
																"action": "insert | update | delete",
																"company": {
																	"name": "string",
																	"homepage": "string",
																	"symbol": {
																		"exchange": "string",
																		"ticker": "string"
																	}
																},
																"lang": "한글 | 영문 | 일본어 | 중국어",
																"catetory": {
																	"industry": [
																		{
																			"cat": {
																				"code": "integer",
																				"name": "string"
																			},
																			"sub_cat": {
																				"code": "integer",
																				"name": "string"
																			}
																		}
																	],
																	"theme": {
																		"code": "integer",
																		"name": "string"
																	},
																	"region": {
																		"code": "integer",
																		"name": "string"
																	}
																},
																"title":"string",
																"subtitle":"string",
																"content":"string",
																"photo":[
																	{
																		"url":"string",
																		"intro":"string"
																	}
																],
																"youtube":{
																	"url":"string",
																	"intro":"string"
																},
																"offer":"string",
																"url":"string",
																"press_time":"string",
																"req_time":"string"
															}
														]
													}
												
응답 항목:
항목 Mandatory Type 설명
send_id Mandatory string SEND-xxxx-YYYYmmddhhiiss-xxx
보도자료 수신 ID
send_time Mandatory string ISO 8601 형식. 2025-11-28T10:26:08+09:00
보도자료 수신 시각
status Mandatory string processing | completed
statuscode Mandatory integer - 200: 성공
- 그 외: 실패
statusname Mandatory string success | fail
matched_count Mandatory integer 보도자료 수. 0 ~ 100
news Mandatory Optional 기사 목록
news 항목:
항목 Mandatory Type 설명
pid Mandatory integer 전송 고유 아이디
newsid Mandatory integer 보도자료 고유 아이디
action Mandatory string 기사 처리 방법. insert, update, delete
company.name Optional string 회사명
company.homepage Optional string 홈페이지 URL
company.symbol.exchange Optional string 상장사
company.symbol.ticker Optional string 상장코드
lang Optional string 한글 | 영문 | 일본어 | 중국어
category.industry[0].cat.code Optional Integer 첫번째 산업 1차 카테고리 분류 코드
category.industry[0].cat.name Optional string 첫번째 산업 1차 카테고리명
category.industry[0].sub_cat.code Optional Integer 첫번째 산업 2차 카테고리 분류 코드
category.industry[0].sub_cat.name Optional string 첫번째 산업 2차 카테고리명
category.industry[1].cat.code Optional Integer 두번째 산업 1차 카테고리 분류 코드
category.industry[1].cat.name Optional string 두번째 산업 1차 카테고리명
category.industry[1].sub_cat.code Optional Integer 두번째 산업 2차 카테고리 분류 코드
category.industry[1].sub_cat.name Optional string 두번째 산업 2차 카테고리명
category.theme.code Optional Integer 주제 카테고리 분류 코드
category.theme.name Optional string 주제 카테고리명
category.region.code Optional Integer 지역 카테고리 분류 코드
category.region.name Optional string 지역 카테고리명
title Optional string 보도자료 제목
subtitle Optional string 보도자료 부제목
content Optional string 보도자료 본문
photo[0].url Optional string 사진 URL. 사진은 최대 5장까지 있을 수 있음
photo[0].intro Optional string 사진 설명
photo[1].url Optional string 사진 URL
photo[1].intro Optional string 사진 설명
youtube.url Optional string 유튜브 URL
youtube.intro Optional string 유튜브 설명
offer Optional string 보도자료 통신사 뉴스와이어(www.newswire.co.kr) 배포
url Optional string 보도자료 원문 URL
press_time Optional string 보도자료 발표시각
2024-01-23T14:10:00+09:00
현재시간보다 크면 노출 금지
req_time Optional string 보도자료 처리 요청 시각
2025-10-23T14:10:00+09:00

보도자료 수신 결과 확인

확인 방법
  • 보도자료 수신 시 발급된 send_id 값을 사용해 확인 할 수 있습니다.
  • 아래 API URL에 GET 방식으로 요청 합니다.
  • 수신 결과 확인 시에는 API Header 정보가 필요하지 않습니다.
  • 보도자료 수신 결과확인은 옵션이며, 제휴사에 필요할 경우에만 확인 하면 됩니다.
API URL

GET https://www.newswire.co.kr/api/v1/send/{send_id}/status

응답 예시:
													JSON
													{
														"partner_id": 2002,
														"request_id": "REQ-2002-20251118122311-123",
														"send_id": "SEND-2002-20251118122311-123",
														"send_time": "2025-11-18T09:00:00+09:00",
														"status": "completed | failed",
														"statuscode": 200,
														"statusname": "success"
													}
												
응답 항목:
항목 Mandatory Type 설명
partner_id Mandatory integer 파트너사에 부여된 고유 아이디
request_id Mandatory string REQ-xxxx-YYYYmmddhhiiss-xxx
보도자료 요청 ID
send_id Mandatory string SEND-xxxx-YYYYmmddhhiiss-xxx
보도자료 수신 ID
send_time Mandatory integer ISO 8601 형식. 2025-11-28T10:26:08+09:00
보도자료 수신 시각
status Mandatory string completed | failed
statuscode Mandatory string - 200: 성공
- 그 외: 실패
statusname Mandatory string - success: 성공
- fail: 실패
error Optional string 에러 발생시 에러 메시지

보도자료 수신 이력 조회

최근 30건의 보도자료 수신 이력을 조회할 수 있습니다.

API Header
항목 Mandatory 설명
Content-Type Mandatory 요청 Body Content Type을 application/json으로 지정 (POST)
X-HMAC Mandatory 발급받은 API Key와 sha256 해시 알고리즘을 이용해 생성
X-Timestamp Mandatory 1970년 1월 1일 00:00:00 협정 세계시(UTC)부터의 경과 시간을 밀리초(Millisecond)로 나타냄
API Gateway 서버와 시간 차가 5분 이상 나는 경우 유효하지 않은 요청으로 간주
API URL

POST https://www.newswire.co.kr/api/v1/history

요청 예시:
													JSON
													{
														"partner_id": 2002
													}
												
응답 예시:
													JSON
													{
														"partner_id": 2002,
														"statuscode": 200,
														"statusname": "success",
														"history": [
															{
																"request_id": "REQ-2002-20251127111212-700",
																"send_id": "SEND-2002-20251127111221-910",
																"request_time": "2025-11-27T11:12:12+09:00",
																"send_time": "2025-11-27T11:12:21+09:00",
																"matched_count": 30,
																"request_status": "completed",
																"send_status": "completed"
															},
															{
																"request_id": "REQ-2002-20251127075908-461",
																"send_id": "SEND-2002-20251127081131-941",
																"request_time": "2025-11-27T07:59:08+09:00",
																"send_time": "2025-11-27T08:11:31+09:00",
																"matched_count": 30,
																"request_status": "completed",
																"send_status": "completed"
															}
														]
													}
												
응답 항목:
항목 Mandatory Type 설명
partner_id Mandatory string 파트너사에 부여된 고유 아이디
statuscode Mandatory integer - 200: 성공
- 그 외: 실패
statusname Mandatory string - success: 성공
- fail: 실패
history Mandatory string 전송 이력 목록
history
항목 Mandatory Type 설명
request_id Mandatory string REQ-xxxx-YYYYmmddhhiiss-xxx
보도자료 요청 ID
send_id Mandatory string SEND-xxxx-YYYYmmddhhiiss-xxx
보도자료 수신 Id
request_time Mandatory string 요청시각
ISO 8601 형식. 2025-11-28T10:26:08+09:00
send_time Mandatory string 수신시각
ISO 8601 형식. 2025-11-28T10:26:08+09:00
matched_count Mandatory integer 보도자료 수신 갯수. 0 ~ 100
request_status Mandatory string completed | failed
send_status Mandatory string completed | failed

콜백 처리 안내(옵션)

보도자료를 받은 후 해당 보도자료가 실제로 사용된 곳(예: 기사, 블로그 등)의 URL을 뉴스와이어에 전달할 수 있습니다.

처리 조건
  • 선택 사항(Optional)
    이 기능은 필수기능이 아니며, URL 공개가 가능 할 경우에만 처리하면 됩니다.
    수신한 보도자료에는 고유한 {pid} 값이 있으며, 이 {pid} 값으로 콜백해야 합니다.
  • URL 요건
    내부망 주소는 허용되지 않으며, 반드시 외부에서 접근 가능한 공개 URL만 전달해야 합니다.
  • 데이터 제공 대상
    수집된 URL 정보는 보도자료를 발표한 기업에 제공됩니다.
API Header
항목 Mandatory 설명
Content-Type Mandatory 요청 Body Content Type을 application/json으로 지정 (POST)
API URL

POST https://www.newswire.co.kr/api/v1/callback/{pid}

요청 예시:
													JSON
													{
														"send_id": "SEND-2002-20251215105107-505",
														"callbackurl": "https://v.daum.net/v/20251210133814774"
													}
												
응답 예시:
													JSON
													{
														"partner_id": 2002,
														"status": "completed | failed",
														"statuscode": 200,
														"statusname": "success"
													}
												

HTTP 상태 코드

코드 설명
200 Accept (요청 완료)
400 잘못된 요청 (필수 필드 누락 등)
401 인증 실패
402 자료 없음
403 권한 없음
404 리소스 없음
405 잘못된 요청 메서드
500 서버 내부 오류

X-HMAC

뉴스와이어에서 제공한 API Key와 sha256 해시 알고리즘을 이용해 생성합니다.

생성 방법:
													PHP

													$data = '/api/v1/request' . time(); // 데이터 생성: 요청 URL + 현재 타임스탬프
													$key = “API_KEY”;
													echo generateHMAC($data, $key);

													function generateHMAC(string $data, string $key, string $algorithm = 'sha256'): string {
														// HMAC 생성 (raw binary)
														$raw = hash_hmac($algorithm, $data, $key, true);
														// Base64 인코딩 후 반환
														return base64_encode($raw);
													}
												
													Java

													import javax.crypto.Mac;
													import javax.crypto.spec.SecretKeySpec;
													import java.util.Base64;

													public class HMACUtil {
														public static String generateHMAC(String data, String key, String algorithm) throws Exception {
															Mac mac = Mac.getInstance(algorithm);
															SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"), algorithm);
															mac.init(secretKeySpec);

															byte[] rawHmac = mac.doFinal(data.getBytes("UTF-8"));
															return Base64.getEncoder().encodeToString(rawHmac);
														}

														public static void main(String[] args) throws Exception {
															String data = "/api/v1/request" + (System.currentTimeMillis() / 1000);
															String key = "873c6fb26f787963e51474fd75bb3393";

															// 기본 알고리즘은 HmacSHA256
															String hmac = generateHMAC(data, key, "HmacSHA256");

															System.out.println("Data: " + data);
															System.out.println("HMAC: " + hmac);
														}
													}
												
													Python

													import time
													import hmac
													import hashlib
													import base64

													def generate_hmac(data: str, key: str, algorithm: str = 'sha256') -> str:
														# HMAC 생성 (raw binary)
														raw = hmac.new(key.encode(), data.encode(), getattr(hashlib, algorithm)).digest()
														# Base64 인코딩 후 반환
														return base64.b64encode(raw).decode()

													# 데이터 생성: 요청 URL + 현재 타임스탬프
													data = '/api/v1/request' + str(int(time.time()))
													key = "API_KEY"

													print(generate_hmac(data, key))