파일 업로드 자리 발급
파일 바이트는 이 API를 거치지 않는다. 응답 `uploadUrl`에 파일을 그대로 PUT하면(1시간 유효) `url`이 공개 주소가 된다. 상품 이미지는 그 주소를 상품의 `images`에 넣는다. 허용 확장자와 크기 상한은 `purpose`가 정한다 — `product-image`: jpg·jpeg·png·webp·avif·gif / 최대 10MB, `description`: jpg·jpeg·png·gif·webp·avif·svg·mp4·webm·mov / 최대 50MB, `flow-attachment`: jpg·jpeg·png·webp·avif·gif·pdf / 최대 20MB, `ai-attachment`: jpg·jpeg·png·webp·gif·pdf / 최대 10MB. 객체 키는 서버가 정하므로 보낸 파일명은 확장자만 쓰이고 저장되지 않는다.
파일 바이트는 이 API를 거치지 않는다. 응답 uploadUrl에 파일을 그대로 PUT하면(1시간 유효) url이 공개 주소가 된다. 상품 이미지는 그 주소를 상품의 images에 넣는다. 허용 확장자와 크기 상한은 purpose가 정한다 — product-image: jpg·jpeg·png·webp·avif·gif / 최대 10MB, description: jpg·jpeg·png·gif·webp·avif·svg·mp4·webm·mov / 최대 50MB, flow-attachment: jpg·jpeg·png·webp·avif·gif·pdf / 최대 20MB, ai-attachment: jpg·jpeg·png·webp·gif·pdf / 최대 10MB. 객체 키는 서버가 정하므로 보낸 파일명은 확장자만 쓰이고 저장되지 않는다.
accessTokenAuthorizationBearer <token>Sayren 계정 토큰(로그인 토큰 또는 개인 액세스 토큰, RFC 9068 JWT)
X-Store-Id*string대상 상점 id. 토큰의 상점 범위 밖이면 403 STORE_NOT_GRANTED, 없으면 400 STORE_ID_REQUIRED다
application/json- body
filename*string1 <= length <= 255purpose?string업로드 용도. 허용 확장자와 크기 상한이 용도별로 다르다
"description""product-image""description""flow-attachment""ai-attachment"size?integer파일 바이트 크기. 주면 용도별 상한을 발급 전에 검사한다
0 < value자리 발급 완료
application/json- response
meta*data*error*|nullcurl -X POST 'https://api.sayren.io/v1/uploads' \ -H 'X-Store-Id: string' \ -H 'Content-Type: application/json' \ -d '{ "filename": "string"}'{ "meta": { "status": 201, "code": "OK", "message": "OK", "isSuccess": true }, "data": { "url": "http://example.com", "uploadUrl": "http://example.com" }, "error": null}