sayren Docs
컬렉션

컬렉션 만들기

직접 선택(`MANUAL`)은 `productIds`가 처음 담을 상품과 순서다. 조건 자동(`AUTOMATIC`)은 `rules`(AND)가 필수이고 조회할 때마다 조건을 만족하는 판매 중 상품을 계산한다. 유형은 만든 뒤 바꿀 수 없다. 주소(`slug`)를 생략하면 `c-{id 뒤 8자}`다. 주소가 겹치면 409 `COLLECTION_SLUG_TAKEN`, 상점당 200개를 넘으면 409 `COLLECTION_LIMIT_EXCEEDED`, 상점에 없는 상품은 400 `COLLECTION_PRODUCT_NOT_FOUND`, 상점에 없는 카테고리는 400 `COLLECTION_CATEGORY_NOT_FOUND`다. 조건 자동에 조건이 없으면 400 `COLLECTION_RULES_REQUIRED`, 상품을 주면 400 `COLLECTION_PRODUCTS_NOT_ALLOWED`, 정렬 `MANUAL`이면 400 `COLLECTION_SORT_INVALID`, 직접 선택에 조건을 주면 400 `COLLECTION_RULES_NOT_ALLOWED`다

POST
/v1/collections

직접 선택(MANUAL)은 productIds가 처음 담을 상품과 순서다. 조건 자동(AUTOMATIC)은 rules(AND)가 필수이고 조회할 때마다 조건을 만족하는 판매 중 상품을 계산한다. 유형은 만든 뒤 바꿀 수 없다. 주소(slug)를 생략하면 c-{id 뒤 8자}다. 주소가 겹치면 409 COLLECTION_SLUG_TAKEN, 상점당 200개를 넘으면 409 COLLECTION_LIMIT_EXCEEDED, 상점에 없는 상품은 400 COLLECTION_PRODUCT_NOT_FOUND, 상점에 없는 카테고리는 400 COLLECTION_CATEGORY_NOT_FOUND다. 조건 자동에 조건이 없으면 400 COLLECTION_RULES_REQUIRED, 상품을 주면 400 COLLECTION_PRODUCTS_NOT_ALLOWED, 정렬 MANUAL이면 400 COLLECTION_SORT_INVALID, 직접 선택에 조건을 주면 400 COLLECTION_RULES_NOT_ALLOWED다

Authorization

accessToken
headerAuthorizationBearer <token>

Sayren 계정 토큰(로그인 토큰 또는 개인 액세스 토큰, RFC 9068 JWT)

Header Parameters

X-Store-Id*string

대상 상점 id. 토큰의 상점 범위 밖이면 403 STORE_NOT_GRANTED, 없으면 400 STORE_ID_REQUIRED다

Request Body

application/json
  1. body
title*string

제목

Length1 <= length <= 60
slug?string

주소. 영문 소문자·숫자·하이픈 64자까지, 상점 안에서 유일하다(겹치면 409 COLLECTION_SLUG_TAKEN)

Match^[a-z0-9][a-z0-9-]{0,63}$
type?string

유형. MANUAL(직접 선택)·AUTOMATIC(조건 자동). 만든 뒤 바꿀 수 없다

Default"MANUAL"
Value in"MANUAL""AUTOMATIC"
rules?array<||||>

조건 자동 컬렉션의 조건(AND). 조건 자동이면 필수, 직접 선택이면 줄 수 없다

Items1 <= items <= 10
description?string

설명(텍스트)

Lengthlength <= 500
Default""
imageUrl?|

대표 이미지 주소. https만 받는다

Formaturi
Lengthlength <= 2048
productSort?string

스토어프론트 상품 기본 정렬. 생략하면 직접 선택은 MANUAL, 조건 자동은 LATEST(판매량 상위 조건이 있으면 BEST_SELLING)다. 조건 자동은 MANUAL을 쓸 수 없다

Value in"MANUAL""LATEST""BEST_SELLING""PRICE_ASC""PRICE_DESC""REVIEW_COUNT""RATING_DESC""RECOMMEND"
visible?boolean

노출 여부

Defaulttrue
startsAt?|

노출 시작 시각(ISO 8601, 시간대 포함). null이면 바로 노출한다

Match^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
Formatdate-time
endsAt?|

노출 종료 시각(ISO 8601, 시간대 포함). null이면 끝나지 않는다

Match^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
Formatdate-time
sortOrder?integer

목록 순서. 생략하면 맨 뒤

Range0 <= value <= 1000000
metaTitle?|

검색 결과 제목

Lengthlength <= 60
metaDescription?|

검색 결과 설명

Lengthlength <= 160
productIds?array<>

상품 id. 배열 순서가 직접 정한 순서다. 겹치는 id는 처음 것만 남긴다

Itemsitems <= 1000

Response Body

성공

application/json
  1. response
meta*
data*
error*|null
curl -X POST 'https://api.sayren.io/v1/collections' \  -H 'X-Store-Id: string' \  -H 'Content-Type: application/json' \  -d '{  "title": "string"}'
{  "meta": {    "status": 201,    "code": "OK",    "message": "OK",    "isSuccess": true  },  "data": {    "collectionId": "string",    "type": "string",    "title": "string",    "slug": "string",    "description": "string",    "imageUrl": "string",    "productSort": "string",    "rules": [      {        "field": "createdWithinDays",        "value": 1      }    ],    "visible": true,    "startsAt": "string",    "endsAt": "string",    "sortOrder": 0,    "metaTitle": "string",    "metaDescription": "string",    "state": "ACTIVE",    "salesComputedAt": null,    "productCount": 0,    "revision": 0,    "createdAt": "string",    "updatedAt": "string"  },  "error": null}