시작하기
베이스 URL, 인증 개요, 데모 계정, 첫 API 호출
베이스 URL
| API | 베이스 URL |
|---|---|
| 관리(Store) API | https://shop.api.avarlabs.com/v1 |
| 스토어프론트 API | https://shop.api.avarlabs.com/storefront/v1 |
인증 개요
관리(Store) API는 OAuth 2.1을 따릅니다.
- 사람:
GET /v1/oauth2/authorize(authorization_code + PKCE)로 로그인 → userToken → token-exchange grant로 storeToken(스토어 스코프) 교환 - 서버(M2M):
client_credentialsgrant(Basic 인증) → 스토어에 바인딩된 클라이언트라 storeToken이 곧바로 발급
이후 상품/주문 등 모든 스토어 리소스는 Authorization: Bearer {storeToken}으로 호출합니다.
storeToken이 테넌트를 결정하므로 경로에 storeId가 필요 없습니다.
스토어프론트 API는 X-Store-Code 헤더로 스토어를 지정합니다(없으면 mystore 스토어).
카탈로그·장바구니는 인증 없이 사용할 수 있고, 회원 전용 기능(/me/**)은
POST /storefront/v1/auth/login으로 받은 Access Token(Bearer)이 필요합니다.
데모 계정
mystore 스토어에 데모 데이터가 준비되어 있습니다. 데모 데이터는 주기적으로 초기화될 수 있습니다.
| 용도 | 자격증명 |
|---|---|
| 셀러 (mystore 스토어 OWNER) | owner@example.com / owner1234! |
| 셀러 (STAFF) | staff@example.com / staff1234! |
| 스토어프론트 회원 | buyer@example.com / buyer1234! |
| API 클라이언트 (client_credentials) | demo-client / demo-secret-key |
첫 API 호출
# 1) M2M 클라이언트로 storeToken 발급 (client_credentials, Basic 인증)
curl -u demo-client:demo-secret-key \
https://shop.api.avarlabs.com/v1/oauth2/token \
-d "grant_type=client_credentials"
# 2) 발급받은 storeToken으로 관리 API 호출
curl https://shop.api.avarlabs.com/v1/products \
-H "Authorization: Bearer {access_token}"
# 3) 스토어프론트 상품 목록 (mystore 스토어, 인증 불필요)
curl https://shop.api.avarlabs.com/storefront/v1/products -H "X-Store-Code: mystore"표준 응답 구조
모든 응답(성공/실패)은 같은 엔벨로프로 반환됩니다.
{
"meta": { "status": 200, "code": "OK", "message": "OK", "isSuccess": true },
"content": { "...": "성공 데이터" },
"error": null
}실패 시에는 content가 null이고 error에 상세가 담깁니다.
{
"meta": { "status": 409, "code": "OUT_OF_STOCK", "message": "재고가 부족합니다", "isSuccess": false },
"content": null,
"error": { "code": "OUT_OF_STOCK", "message": "재고가 부족합니다", "traceId": "..." }
}$.meta.status— HTTP 상태 코드,$.meta.isSuccess— 성공 여부$.meta.code— 성공"OK", 실패 시 도메인 에러 코드(예:OUT_OF_STOCK,TENANT_MISMATCH)$.error.traceId— 문의 시 전달용 추적 ID (fieldErrors가 포함될 수 있음)204 No Content응답은 본문이 없습니다- 예외: OAuth 토큰 엔드포인트(
/v1/oauth2/*)는 RFC 6749 형식(평면 JSON, 실패 시{ "error", "error_description" })으로 응답합니다
공통 규칙
- 페이지네이션 — 목록 조회는
page/size쿼리를 받고$.data에{ page, size, totalElements, totalPages, contents }가 담깁니다. - 일시 — ISO 8601, KST 오프셋 포함 (예:
2026-07-01T00:00:00+09:00) - 멱등성 — 중복에 민감한 POST(발주 확인, 발송 등)는
Idempotency-Key헤더를 지원합니다. 같은 키로 재호출하면 최초 응답이 재생됩니다. - 일괄 처리 — 최대 100건,
{ succeeded, failed }부분 성공으로 응답합니다.