주문에 딸린 발주(배송) 단위로 상태와 운송장을 갱신해요. 관리자 주문 상세의 [발송처리]와 같은 처리를 서버에서 하는 API예요.
발송 완료로 넘기면서 운송장을 같이 넣으면 배송 추적이 자동으로 붙어요. 그 뒤로는 택배사가 알려주는 단계가 자동으로 쌓여요 — 배송추적 조회로 읽으면 되고, 배송 완료를 받으면 발주 상태도 배송 완료로 스스로 넘어가요.
Basic 인증과 user:order_purchase_update scope가 필요해요. 입력과 오류 전체는 주문 API 원문를 확인해요.
API 엔드포인트
purchases[]에 다른 주문의 order_purchase_number를 섞으면 ORDER_PURCHASE_NOT_FOUND로 요청 전체가 거절돼요.
요청 파라미터
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
order_number |
String | 필수 | 주문번호 (URL 경로) |
purchases |
Array | 필수 | 갱신할 발주 목록. 한 번에 최대 50건 |
purchases[].order_purchase_number |
String | 필수 | 발주 번호 — 주문 상세 응답의 order_purchases[].order_purchase_number |
purchases[].status |
Integer | 필수 | 바꿀 발주 상태 — 2 발주 확인 · 3 상품 준비중 · 4 발송 완료 · 5 배송 완료 |
purchases[].delivery_company_code |
String | 선택 | 택배사 코드 (예: CJGLS) |
purchases[].tracking_number |
String | 선택 | 운송장 번호 |
purchases[].delivery_type |
Integer | 선택 | 배송 유형 — 커머스 Enum 참고 |
purchases[].chosen_product_option_id |
String | 선택 | 발주 안에서 특정 옵션만 처리할 때 |
여러 발주는 순서대로 처리돼요. 중간 항목에서 오류가 나면 앞 항목의 변경은 남을 수 있어요. 오류 뒤에는 배송추적 조회로 현재 상태를 다시 확인해요.
status는 위 네 가지만 받아요. 발주 취소·무효는 환불·클레임과 얽혀 있어 관리자에서만 처리해요.
코드 예제
curl -X PUT "https://api.bootapi.com/v1/orders/25071182085082524116/purchases" \
-H "Authorization: Basic {base64(client_key:secret_key)}" \
-H "Content-Type: application/json" \
-d '{
"purchases": [
{
"order_purchase_number": "P25071182085082524116",
"status": 4,
"delivery_company_code": "CJGLS",
"tracking_number": "620148310301"
}
]
}'bashconst { BootpayCommerce } = require('@bootpay/backend-js')
const commerce = new BootpayCommerce({
client_key: 'your-commerce-client-key',
secret_key: 'your-commerce-secret-key',
mode: 'production'
})
const response = await commerce.put('orders/25071182085082524116/purchases', { purchases: [
{
order_purchase_number: 'P25071182085082524116',
status: 4,
delivery_company_code: 'CJGLS',
tracking_number: '620148310301'
}
] })
console.log(response)javascript@bootpay/backend-js@2.13.1에는 order.updatePurchases가 없어요. 위처럼 SDK 공통 put에 { purchases: [...] } 본문을 전달해요. 다른 언어는 해당 버전의 메서드를 확인하거나 위 HTTP 계약을 사용해요.
응답
성공 응답
갱신이 끝난 뒤의 발주 목록이 그대로 돌아와요. 필드 설명은 주문 상세와 같아요.
[
{
"order_purchase_id": "6870824fb0eacea5cd974f12",
"order_purchase_number": "P25071182085082524116",
"status": 4,
"delivery_company_code": "CJGLS",
"tracking_number": "620148310301",
"d_ts": 1,
"sent_at": "2025-07-12T09:10:00Z",
"tracking_histories": []
}
]json송장을 걸어둔 직후라 추적 이력이 비어 있어요. 택배사가 집화하면 그때부터 d_ts와 tracking_histories가 채워져요.
에러 코드
인증·권한 관련 에러는 에러 코드표를 참고해요.
| 코드 | 메시지 | 대처 방법 |
|---|---|---|
ORDER_NOT_FOUND |
주문내역을 찾지 못했어요. | order_number를 넣었는지 확인해요 (order_id 아님) |
ORDER_DENIED |
주문 정보를 조회할 권한이 없어요. | 다른 프로젝트의 주문번호는 아닌지 확인해요 |
ORDER_PURCHASE_NOT_FOUND |
존재하지 않는 발주기록이에요. | 경로의 주문에 딸린 order_purchase_number인지 확인해요 |
REQUIRED_PARAMETER_IS_MISSING |
필수 파라미터가 없어요. | purchases 배열을 넣었는지 확인해요 |
INVALID_PARAMETER |
파라미터가 올바르지 않아요. | status가 2·3·4·5 중 하나인지, 발주가 50건을 넘지 않는지 확인해요 |
