연동 절차 안내

WHATTA 택배 API 연동 문서

WHATTA를 통한 CJ대한통운·우체국 택배 연동을 위한 개발자 문서입니다. 주문 수집부터 배송 접수·송장 출력까지의 절차와 Bearer 인증, OpenAPI 명세를 확인하세요.

목차에서 항목 선택
01 · 회원과 개발자

주소와 인증

마이페이지에서 발급되는 값 중 API 호출에 필요한 인증값은 WHATTA 연동 코드 하나입니다.

  1. 연동 코드 발급마이페이지(/mypage/) → 쇼핑몰 연동에서 발급합니다. 기존 주문 관리 화면으로 이동할 필요가 없습니다.
  2. 서버에 보관하고 요청에 사용코드를 안전하게 보관하고, HTTPS 요청 헤더에 아래 값을 넣습니다.
요청 주소https://www.whatta.co.kr
인증 헤더Authorization: Bearer <연동 코드>
함께 발급되는 두 번째 값은 API 키가 아닙니다송장 자동회신을 별도로 구성할 때만 사용하는 callback 서명 검증 비밀키입니다. 주문·배송 API의 Bearer 인증에는 사용하지 않으며, 자동회신을 설정하지 않는다면 개발자에게 전달할 필요가 없습니다.
ZIP·SDK 없이 직접 연동할 수 있습니다쇼핑몰 개발자가 기존 쇼핑몰 서버에서 HTTPS 요청을 보내면 됩니다. PHP·cURL 등 사용하는 언어의 HTTP client로 아래 요청을 구현하세요. 브라우저 JavaScript에 연동 코드를 넣지 마세요.
  1. 쇼핑몰의 발송 준비 완료 시점에 호출결제·재고·발송 가능 여부를 쇼핑몰에서 확인한 뒤, 쇼핑몰 서버의 주문 처리 흐름에서 WHATTA를 호출합니다. merchantFulfillmentReady는 실제 확인 결과에 따라 JSON boolean으로 설정하고 항상 true로 고정하지 마세요.
  2. 주문 필드 연결쇼핑몰 주문번호를 shopOrderId, 수취인 정보를 receiver, 상품명·수량을 products에 매핑합니다. 받는 분 상세주소 receiver.address2도 전달하고, 보내는 분 정보는 회원이 마이페이지에 저장한 발송처 설정을 사용합니다.
  3. 응답에 따라 처리status와 shipmentQueueStatus를 확인합니다. 접수대기 초안 생성은 실제 택배 접수나 송장 발급 완료가 아닙니다. 중복·충돌·응답 유실은 아래 결과 안내를 따르세요.
실제 운영에 반영됩니다요청에 따라 주문 저장·사용량 집계·택배 접수가 발생할 수 있습니다. 공개 테스트 환경은 확인되지 않았으므로 예시 주문을 운영 주소로 보내지 마세요.
무료 사용량과 이용 조건
  • 회원의 모든 쇼핑몰 호출을 합산해 누적 30회까지 무료입니다. 매월 초기화되지 않습니다.
  • 31회부터 유효한 결제 이용권(PAYMENT) 또는 관리자 부여 권한(ADMIN)이 필요합니다. 쇼핑몰 주문 결제와는 별개입니다.
  • 검증·중복 요청과 인증 후 입력 오류도 집계될 수 있습니다.
  • 서버는 코드 권한과 회원 이용 상태를 확인합니다. 본인 CJ·우체국 계정은 별도 WHATTA 관리자 사전 승인 없이, 계약·필수정보·인증 확인 후 사용할 수 있습니다.
02 · 쇼핑몰 개발자

발송 준비된 주문 전송

쇼핑몰 서버에서 WHATTA로 주문 전송을 실행하면 유효한 요청은 주문으로 수집됩니다. 이 연결에는 ZIP이나 택배사별 주문 endpoint가 필요하지 않습니다. 신규 CUSTOM 주문은 merchantFulfillmentReady: true가 수집·내부 접수대기 초안 생성의 기준입니다.

POST /api/shop/orders/
  • 주문번호, 받는 분의 연락처·주소(상세주소 포함), 상품명과 수량을 보냅니다. 보내는 분 정보는 회원이 WHATTA /mypage/에 저장한 발송처 설정을 사용합니다.
  • merchantFulfillmentReady는 JSON boolean true여야 합니다. WHATTA는 이 판매자 선언을 받으며 결제를 독립 검증하지 않습니다.
  • CUSTOM 접수대기 초안에는 orderStatus와 paymentStatus가 필요하지 않으며, 두 값은 초안 생성 조건으로 사용하지 않습니다. 택배사 고객코드·사업자번호·인증정보도 이 주문 수집 요청의 필드가 아닙니다.
주문 저장 후 택배 접수가 필요합니다주문이나 접수대기가 생성돼도 송장은 아직 발급되지 않습니다. 결과를 확인하고 접수 단계로 진행하세요.
주문 데이터 예제 보기 (JSON)

가상 주문입니다. 운영 주소로 그대로 전송하지 마세요.

요청 본문JSON
{
  "shopOrderId": "DOC-ORDER-0001",
  "merchantFulfillmentReady": true,
  "receiver": {
    "name": "가상 수취인",
    "phone": "010-0000-0000",
    "zipcode": "06236",
    "address1": "서울 예시로 1",
    "address2": "가상 주소"
  },
  "products": [{"name": "가상 상품", "quantity": 1}]
}

예제에 orderStatus/paymentStatus가 없는 것은 정상입니다. 받는 분 address2는 내부 접수대기 초안에 필요한 상세주소이므로 비어 있지 않게 보내세요.

전송 예제와 검증 방법 보기 (cURL)

아래 주소는 예시용이며 실제 전송에 사용할 수 없습니다.

요청 예제cURL
curl --disable --request POST \
  'https://whatta.example.invalid/api/shop/orders/' \
  --header 'Authorization: Bearer REPLACE_WITH_YOUR_CODE' \
  --header 'Content-Type: application/json' \
  --data-binary @order.json

회원용 예제는 기본적으로 서버 전송 없이 로컬에서 점검합니다(dry-run). validateOnly: true는 실제 HTTP 요청이므로 사용량에 포함될 수 있습니다.

터미널에서 발급 코드를 넣어 직접 호출하기

마이페이지 → 쇼핑몰 연동에서 발급한 연동 코드가 API 키 역할을 합니다. Bash 터미널에서 실행하면 입력 프롬프트가 나오며, 발급 코드를 붙여 넣으면 Bearer 인증값으로 전송됩니다. 코드는 명령행 인수나 셸 히스토리에 직접 적지 않습니다. order.json은 위 요청 본문을 UTF-8 JSON 파일로 저장한 것입니다.

실제 운영 요청입니다아래 명령은 주문을 저장하고 API 사용량을 사용할 수 있습니다. 실제 발송 준비가 된 주문에만 실행하세요. 가상 주문으로 시험하지 마세요.
(
  set +x
  read -r -s -p 'WHATTA 연동 코드: ' WHATTA_TOKEN
  printf '\n'
  curl --disable --config - <<EOF
url = "https://www.whatta.co.kr/api/shop/orders/"
request = "POST"
header = "Authorization: Bearer ${WHATTA_TOKEN}"
header = "Content-Type: application/json"
data-binary = "@order.json"
EOF
  result=$?
  unset WHATTA_TOKEN
  exit "$result"
)

요청 응답의 HTTP 상태와 JSON status를 확인하세요. 토큰을 채팅·공개 문서·브라우저 JavaScript·공유 터미널 기록에 붙여 넣지 말고, 노출된 코드는 마이페이지에서 폐기 후 재발급하세요.

전체 필드와 자료형은 OpenAPI 명세에서 확인하세요.

03 · 회원과 개발자

수집 결과 확인

주문 화면(/orders/)에서 수집 여부를, 접수 관리(/manage/)에서 배송 처리 상태를 확인하세요.

개발자는 HTTP 상태와 status, shipmentQueueStatus를 함께 확인합니다.

표를 좌우로 밀어 전체 내용을 확인하세요.

응답다음 할 일
CREATED저장된 주문과 접수대기 정보를 확인합니다.
NEEDS_REVIEWdata.shipmentQueueStatus도 확인합니다. CREATED면 주문과 내부 초안은 저장됐고, carrierSetupRequired: true는 회원 화면에서 택배사 설정이 더 필요하다는 뜻입니다. 초안 생성이 안 됐으면 필수 배송정보를 보완합니다.
DUPLICATE동일한 주문이 있습니다. 기존 결과를 사용합니다.
VALIDATION_OK입력 검증만 완료됐습니다. 저장되지 않았으며 호출 사용량은 적용될 수 있습니다.
409 PAYLOAD_CONFLICT같은 주문번호의 내용이 다릅니다. 재전송 전에 기존 주문을 확인합니다.
422 MERCHANT_FULFILLMENT_NOT_READYmerchantFulfillmentReady: false이면 저장하지 않습니다. 쇼핑몰에서 발송 준비를 확인한 뒤 새 요청을 만드세요.
429 RATE_LIMITED짧은 구간 요청 제한입니다. 자동 반복하지 말고 잠시 기다린 뒤 상태를 확인하세요.
429 API_QUOTA_EXCEEDED무료 한도 이후 사용할 이용 권한을 확인합니다.
택배 설정이 필요한 응답 예제 보기

내부 접수대기는 생성됐지만 실제 택배 접수 전인 예입니다.

응답 예제JSON
{
  "success": true,
  "status": "NEEDS_REVIEW",
  "data": {
    "shopOrderId": "DOC-ORDER-0001",
    "shipmentQueueStatus": "CREATED",
    "carrierCode": null,
    "carrierSetupRequired": true,
    "carrierSubmission": "NOT_EXECUTED"
  }
}
04 · WHATTA 회원

택배 접수와 송장 출력

배송정보를 확인하고 접수한 뒤, 운송장번호와 출력 준비 상태를 확인하세요.

  1. 택배사·발송처 설정마이페이지(/mypage/)에 계약·인증·발송처를 저장하고, 주문 화면(/orders/)에서 기본 택배사를 선택합니다.
  2. 접수대기 확인접수 관리(/manage/)에서 주문·보내는 분·받는 분 정보를 확인합니다.
  3. 택배 접수CJ는 송장생성, 우체국은 우체국 송장생성을 누릅니다. 쇼핑몰 서버에서 배송 API로 접수할 수도 있습니다.
  4. 송장 출력접수 완료, 운송장번호, 출력 데이터가 모두 준비되면 송장 출력을 누릅니다.
같은 주문을 두 번 접수하지 마세요회원 화면과 API에서 동시에 접수하지 마세요. 오류나 응답 유실 시에는 먼저 현재 상태를 확인합니다.
접수가 차단된 경우

계약·인증·발송처 정보가 부족하거나 시스템 전체 접수가 중지되면 화면에 사유가 표시됩니다. 회원별 관리자 승인을 기다리는 단계는 아닙니다. 기본 택배사 저장만으로는 접수되지 않습니다.

05 · 택배사별 설정

CJ대한통운

본인 CJ 계약정보와 발송처를 저장한 뒤 접수하세요.

  1. 계약정보 저장마이페이지 → 배송사 설정 → CJ대한통운에서 고객코드·사업자정보·운임·박스·기본 발송처를 입력합니다.
  2. 기본 택배사 선택주문 화면에서 CJ대한통운을 기본 택배사로 저장합니다.
  3. 접수 후 출력접수 관리 → 접수대기에서 송장생성을 누릅니다. 송장번호와 출력 준비 상태를 확인한 뒤 출력합니다.
계약 확인은 실제 접수 시 진행됩니다CJ가 계약정보를 확인합니다. 본인 계정은 WHATTA의 별도 관리자 사전 승인이 필요하지 않습니다.

주문 전송 주소는 우체국과 같습니다. 자동 접수는 7. 배송 API를 참고하세요. 회원 설정 단계는 CJ대한통운 송장출력 가이드에서 확인할 수 있습니다.

06 · 택배사별 설정

우체국

본인 계약정보와 인증정보, 발송처를 준비하세요.

  1. 계약·인증정보 저장마이페이지 → 배송사 설정 → 우체국 계약소포에서 계약 식별정보·인증정보·발송처를 저장하고 인증 상태를 확인합니다.
  2. 기본 택배사 선택주문 화면에서 우체국 계약소포를 기본 택배사로 저장합니다.
  3. 접수 후 출력접수 관리 → 접수대기에서 배송정보를 확인하고 우체국 송장생성을 누릅니다. 접수 결과·등기번호·출력 준비 상태를 확인합니다.
본인 계정의 정보와 인증을 확인하세요별도 WHATTA 관리자 사전 승인은 필요하지 않습니다. 시스템 전체 접수가 중지된 동안에는 접수할 수 없습니다.

CJ와 같은 주문 API를 사용합니다. 자동 접수는 7. 배송 API를 참고하세요. 회원 설정 단계는 우체국 계약소포 설정 가이드에서 확인할 수 있습니다.

07 · 쇼핑몰 개발자

같은 수집 주문의 배송 API

주문 수집 때 사용한 연동 코드와 shopOrderId로 접수·조회·출력을 연결하세요. 저장된 주소와 상품을 다시 보낼 필요는 없습니다.

POST 요청은 실제 택배 접수를 실행할 수 있습니다발송할 주문인지 확인하세요. validateOnly: true는 저장·접수 없이 검증만 합니다. 본인 CJ·우체국 계정은 별도 WHATTA 관리자 승인이 필요하지 않습니다.

표를 좌우로 밀어 전체 내용을 확인하세요.

기능요청 방법
검증·접수POST /api/shop/shipments/
계약·인증·운영 조건을 확인한 뒤 접수를 시도합니다.
결과 조회GET /api/shop/shipments/?shopOrderId=…
배송 요청·송장·출력 상태를 확인합니다. 수집 주문 목록 조회는 아닙니다.
출력 파일 받기GET /api/shop/shipments/label/?shopOrderId=…
접수·번호·유효 출력 세션 확인 후 출력용 SVG를 받습니다.
출력 완료 기록POST /api/shop/shipments/label/
form-urlencoded로 action=mark_printed를 보냅니다. 출력 기록만 남기며 택배 접수는 실행하지 않습니다.
배송 요청 예제 보기 (cURL)

가상 주소와 주문번호입니다. 실제 요청에는 운영 주소·유효한 연동 코드·수집된 주문번호를 사용하세요.

배송 요청cURL
curl --disable --request POST \
  'https://whatta.example.invalid/api/shop/shipments/' \
  --header 'Authorization: Bearer REPLACE_WITH_YOUR_CODE' \
  --header 'Content-Type: application/json' \
  --data '{"shopOrderId":"DOC-ORDER-0001"}'

주문 연결 오류는 409, 코드·권한·택배 설정 오류는 401/403, 이용량 제한은 429, 서버·운영 준비 문제는 503입니다. 오류별 해결 방법 보기

문제 해결

오류와 재시도

오류 코드에 맞는 항목을 확인하세요. 응답이 없더라도 접수가 실패했다고 단정하면 안 됩니다.

재접수 전에 현재 상태부터 확인하세요GET 조회 또는 회원 화면에서 상태를 확인하고, 자동으로 반복 접수하지 마세요.

표를 좌우로 밀어 전체 내용을 확인하세요.

오류확인할 내용
401연동 코드가 유효하고 활성 상태인지 확인합니다.
403 FORBIDDEN_SCOPE코드 권한과 본인 소유의 택배 설정을 확인합니다.
409기존 주문·택배 설정·예약 상태를 확인합니다. 다른 요청 내용을 자동으로 덮어쓰지 않습니다.
422주소·연락처·상품 등 필수정보를 보완합니다.
429 API_QUOTA_EXCEEDED회원 누적 사용량과 이용 권한을 확인합니다. 반복 호출하지 않습니다.
202 UNKNOWN, 503, 응답 없음이미 처리됐을 수 있습니다. 먼저 조회하고 자동 재접수하지 않습니다.
LABEL_PENDING접수 상태·번호·출력 준비 상태를 확인합니다. 접수를 반복하지 않습니다.

전체 요청·응답 형식은 OpenAPI 명세에서 확인하세요.

카카오톡 실시간 상담

카카오톡으로 빠르게 상담해보세요.

문의하기