WHATTA 배송 API Sandbox

Sandbox 전용: 모든 배송 결과, 송장번호, 라벨은 가짜입니다. 실제 CJ대한통운·우체국·롯데 접수, 운송장 발급, 운임 청구, 운영 DB 변경은 발생하지 않습니다.

시작하기

공개 가입은 이메일이나 실제 개인정보를 요구하지 않습니다. 개발용 별칭만 보내고, 응답의 토큰 원문을 안전한 개발 환경에 한 번만 저장하세요.

curl -sS https://sandbox.whatta.co.kr/api/sandbox/tenants \
  -H 'Content-Type: application/json' \
  -d '{"name":"demo-shop-a"}'

공개 가입 토큰의 scope는 ORDER_WRITE이며 이 sandbox 상태에만 적용됩니다. 운영 WHATTA 주문 저장 권한이나 택배사 접수 권한이 아닙니다.

기본 설정

주문 검증·수신

curl -sS "$WHATTA_API_URL/api/shop/orders/" \
  -H "Authorization: Bearer $WHATTA_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"validateOnly":true,"shopOrderId":"DEMO-ORDER-001","receiver":{"name":"홍길동","phone":"010-0000-0000","zipcode":"06236","address1":"서울특별시 강남구 테헤란로 1"},"productName":"테스트 상품"}'

validateOnly:true는 검증만 수행하며 주문을 저장하지 않습니다. 일반 요청은 sandbox 주문 상태를 저장하고 CREATED 또는 DUPLICATE를 반환합니다.

배송 mock 흐름

curl -sS "$WHATTA_API_URL/api/shop/shipments/" \
  -H "Authorization: Bearer $WHATTA_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"carrier":"CJ","shopOrderId":"DEMO-SHIP-001","idempotencyKey":"demo-key-001","sender":{"name":"테스트 발송인","phone":"010-1111-1111","zipcode":"06236","address1":"서울특별시 강남구 테헤란로 1"},"receiver":{"name":"테스트 수취인","phone":"010-2222-2222","zipcode":"04524","address1":"서울특별시 중구 세종대로 1"},"product":{"name":"샌드박스 상품"}}'

정상 mock 접수는 201 ACCEPTED와 가짜 송장번호를 반환합니다. 주문번호에 UNKNOWN 또는 LABEL-PENDING을 넣으면 해당 상태를 재현할 수 있습니다. UNKNOWN은 자동 재접수하지 말고 상태를 조회하세요.

상태·라벨

curl -sS "$WHATTA_API_URL/api/shop/shipments/?shopOrderId=DEMO-SHIP-001" \
  -H "Authorization: Bearer $WHATTA_TOKEN"

curl -sS "$WHATTA_API_URL/api/shop/shipments/label/?shopOrderId=DEMO-SHIP-001" \
  -H "Authorization: Bearer $WHATTA_TOKEN" \
  -o mock-label.svg

curl -sS -X POST "$WHATTA_API_URL/api/shop/shipments/label/?shopOrderId=DEMO-SHIP-001" \
  -H "Authorization: Bearer $WHATTA_TOKEN" \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  --data 'action=mark_printed'

라벨은 mock SVG입니다. LABEL_PENDING, UNKNOWN, 송장번호 누락, 만료 상태에서는 라벨을 발급하지 않습니다.

토큰 관리

curl -sS -X POST "$WHATTA_API_URL/api/sandbox/token/rotate" \
  -H "Authorization: Bearer $WHATTA_TOKEN"

curl -sS -X POST "$WHATTA_API_URL/api/sandbox/token/revoke" \
  -H "Authorization: Bearer $WHATTA_TOKEN"

회전 후 이전 토큰은 즉시 폐기됩니다. 폐기하면 tenant와 연결된 sandbox 주문·배송 데이터도 삭제됩니다. 토큰을 잃어버린 경우 이메일 기반 복구는 제공하지 않으며, 운영자가 공개되지 않은 로컬 CLI로 tenant를 정리하거나 새 테스트 tenant를 발급해야 합니다.

오류 처리

응답 JSON의 error_code와 HTTP 상태를 함께 확인하세요. 주요 값은 INVALID_OR_DISABLED_TOKEN(401), FORBIDDEN_SCOPE(403), PAYLOAD_CONFLICT(409), RATE_LIMITED(429), LABEL_SESSION_EXPIRED(410)입니다.

동일 tenant의 동일 주문번호와 다른 payload는 충돌이며, 다른 tenant의 동일 주문번호는 독립 데이터입니다. 토큰·tenant ID를 바꾸어 다른 tenant를 조회할 수 없습니다.

문서

OpenAPI 3.1 JSON

이 sandbox는 실제 택배사 계약·인증·라벨 규격·운영 접수 절차를 재현하지 않습니다. 실제 발송에는 WHATTA 운영 연동, 택배사 계약과 별도 승인이 필요합니다.