목차에서 항목 선택
주소와 인증
마이페이지에서 발급되는 값 중 API 호출에 필요한 인증값은 WHATTA 연동 코드 하나입니다.
- 연동 코드 발급마이페이지(
/mypage/) → 쇼핑몰 연동에서 발급합니다. 기존 주문 관리 화면으로 이동할 필요가 없습니다. - 서버에 보관하고 요청에 사용코드를 안전하게 보관하고, HTTPS 요청 헤더에 아래 값을 넣습니다.
https://www.whatta.co.krAuthorization: Bearer <연동 코드>- 쇼핑몰의 발송 준비 완료 시점에 호출결제·재고·발송 가능 여부를 쇼핑몰에서 확인한 뒤, 쇼핑몰 서버의 주문 처리 흐름에서 WHATTA를 호출합니다.
merchantFulfillmentReady는 실제 확인 결과에 따라 JSON boolean으로 설정하고 항상true로 고정하지 마세요. - 주문 필드 연결쇼핑몰 주문번호를
shopOrderId, 수취인 정보를receiver, 상품명·수량을products에 매핑합니다. 받는 분 상세주소receiver.address2도 전달하고, 보내는 분 정보는 회원이 마이페이지에 저장한 발송처 설정을 사용합니다. - 응답에 따라 처리
status와shipmentQueueStatus를 확인합니다. 접수대기 초안 생성은 실제 택배 접수나 송장 발급 완료가 아닙니다. 중복·충돌·응답 유실은 아래 결과 안내를 따르세요.
무료 사용량과 이용 조건
- 회원의 모든 쇼핑몰 호출을 합산해 누적 30회까지 무료입니다. 매월 초기화되지 않습니다.
- 31회부터 유효한 결제 이용권(PAYMENT) 또는 관리자 부여 권한(ADMIN)이 필요합니다. 쇼핑몰 주문 결제와는 별개입니다.
- 검증·중복 요청과 인증 후 입력 오류도 집계될 수 있습니다.
- 서버는 코드 권한과 회원 이용 상태를 확인합니다. 본인 CJ·우체국 계정은 별도 WHATTA 관리자 사전 승인 없이, 계약·필수정보·인증 확인 후 사용할 수 있습니다.
발송 준비된 주문 전송
쇼핑몰 서버에서 WHATTA로 주문 전송을 실행하면 유효한 요청은 주문으로 수집됩니다. 이 연결에는 ZIP이나 택배사별 주문 endpoint가 필요하지 않습니다. 신규 CUSTOM 주문은 merchantFulfillmentReady: true가 수집·내부 접수대기 초안 생성의 기준입니다.
POST /api/shop/orders/- 주문번호, 받는 분의 연락처·주소(상세주소 포함), 상품명과 수량을 보냅니다. 보내는 분 정보는 회원이 WHATTA
/mypage/에 저장한 발송처 설정을 사용합니다. merchantFulfillmentReady는 JSON booleantrue여야 합니다. WHATTA는 이 판매자 선언을 받으며 결제를 독립 검증하지 않습니다.- CUSTOM 접수대기 초안에는
orderStatus와paymentStatus가 필요하지 않으며, 두 값은 초안 생성 조건으로 사용하지 않습니다. 택배사 고객코드·사업자번호·인증정보도 이 주문 수집 요청의 필드가 아닙니다.
주문 데이터 예제 보기 (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 --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 파일로 저장한 것입니다.
(
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 명세에서 확인하세요.
수집 결과 확인
주문 화면(/orders/)에서 수집 여부를, 접수 관리(/manage/)에서 배송 처리 상태를 확인하세요.
개발자는 HTTP 상태와 status, shipmentQueueStatus를 함께 확인합니다.
표를 좌우로 밀어 전체 내용을 확인하세요.
| 응답 | 다음 할 일 |
|---|---|
CREATED | 저장된 주문과 접수대기 정보를 확인합니다. |
NEEDS_REVIEW | data.shipmentQueueStatus도 확인합니다. CREATED면 주문과 내부 초안은 저장됐고, carrierSetupRequired: true는 회원 화면에서 택배사 설정이 더 필요하다는 뜻입니다. 초안 생성이 안 됐으면 필수 배송정보를 보완합니다. |
DUPLICATE | 동일한 주문이 있습니다. 기존 결과를 사용합니다. |
VALIDATION_OK | 입력 검증만 완료됐습니다. 저장되지 않았으며 호출 사용량은 적용될 수 있습니다. |
409 PAYLOAD_CONFLICT | 같은 주문번호의 내용이 다릅니다. 재전송 전에 기존 주문을 확인합니다. |
422 MERCHANT_FULFILLMENT_NOT_READY | merchantFulfillmentReady: false이면 저장하지 않습니다. 쇼핑몰에서 발송 준비를 확인한 뒤 새 요청을 만드세요. |
429 RATE_LIMITED | 짧은 구간 요청 제한입니다. 자동 반복하지 말고 잠시 기다린 뒤 상태를 확인하세요. |
429 API_QUOTA_EXCEEDED | 무료 한도 이후 사용할 이용 권한을 확인합니다. |
택배 설정이 필요한 응답 예제 보기
내부 접수대기는 생성됐지만 실제 택배 접수 전인 예입니다.
{
"success": true,
"status": "NEEDS_REVIEW",
"data": {
"shopOrderId": "DOC-ORDER-0001",
"shipmentQueueStatus": "CREATED",
"carrierCode": null,
"carrierSetupRequired": true,
"carrierSubmission": "NOT_EXECUTED"
}
}
택배 접수와 송장 출력
배송정보를 확인하고 접수한 뒤, 운송장번호와 출력 준비 상태를 확인하세요.
- 택배사·발송처 설정마이페이지(
/mypage/)에 계약·인증·발송처를 저장하고, 주문 화면(/orders/)에서 기본 택배사를 선택합니다. - 접수대기 확인접수 관리(
/manage/)에서 주문·보내는 분·받는 분 정보를 확인합니다. - 택배 접수CJ는 송장생성, 우체국은 우체국 송장생성을 누릅니다. 쇼핑몰 서버에서 배송 API로 접수할 수도 있습니다.
- 송장 출력접수 완료, 운송장번호, 출력 데이터가 모두 준비되면 송장 출력을 누릅니다.
접수가 차단된 경우
계약·인증·발송처 정보가 부족하거나 시스템 전체 접수가 중지되면 화면에 사유가 표시됩니다. 회원별 관리자 승인을 기다리는 단계는 아닙니다. 기본 택배사 저장만으로는 접수되지 않습니다.
CJ대한통운
본인 CJ 계약정보와 발송처를 저장한 뒤 접수하세요.
- 계약정보 저장마이페이지 → 배송사 설정 → CJ대한통운에서 고객코드·사업자정보·운임·박스·기본 발송처를 입력합니다.
- 기본 택배사 선택주문 화면에서 CJ대한통운을 기본 택배사로 저장합니다.
- 접수 후 출력접수 관리 → 접수대기에서 송장생성을 누릅니다. 송장번호와 출력 준비 상태를 확인한 뒤 출력합니다.
주문 전송 주소는 우체국과 같습니다. 자동 접수는 7. 배송 API를 참고하세요. 회원 설정 단계는 CJ대한통운 송장출력 가이드에서 확인할 수 있습니다.
우체국
본인 계약정보와 인증정보, 발송처를 준비하세요.
- 계약·인증정보 저장마이페이지 → 배송사 설정 → 우체국 계약소포에서 계약 식별정보·인증정보·발송처를 저장하고 인증 상태를 확인합니다.
- 기본 택배사 선택주문 화면에서 우체국 계약소포를 기본 택배사로 저장합니다.
- 접수 후 출력접수 관리 → 접수대기에서 배송정보를 확인하고 우체국 송장생성을 누릅니다. 접수 결과·등기번호·출력 준비 상태를 확인합니다.
CJ와 같은 주문 API를 사용합니다. 자동 접수는 7. 배송 API를 참고하세요. 회원 설정 단계는 우체국 계약소포 설정 가이드에서 확인할 수 있습니다.
같은 수집 주문의 배송 API
주문 수집 때 사용한 연동 코드와 shopOrderId로 접수·조회·출력을 연결하세요. 저장된 주소와 상품을 다시 보낼 필요는 없습니다.
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 --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입니다. 오류별 해결 방법 보기
오류와 재시도
오류 코드에 맞는 항목을 확인하세요. 응답이 없더라도 접수가 실패했다고 단정하면 안 됩니다.
표를 좌우로 밀어 전체 내용을 확인하세요.
| 오류 | 확인할 내용 |
|---|---|
401 | 연동 코드가 유효하고 활성 상태인지 확인합니다. |
403 FORBIDDEN_SCOPE | 코드 권한과 본인 소유의 택배 설정을 확인합니다. |
409 | 기존 주문·택배 설정·예약 상태를 확인합니다. 다른 요청 내용을 자동으로 덮어쓰지 않습니다. |
422 | 주소·연락처·상품 등 필수정보를 보완합니다. |
429 API_QUOTA_EXCEEDED | 회원 누적 사용량과 이용 권한을 확인합니다. 반복 호출하지 않습니다. |
202 UNKNOWN, 503, 응답 없음 | 이미 처리됐을 수 있습니다. 먼저 조회하고 자동 재접수하지 않습니다. |
LABEL_PENDING | 접수 상태·번호·출력 준비 상태를 확인합니다. 접수를 반복하지 않습니다. |
전체 요청·응답 형식은 OpenAPI 명세에서 확인하세요.