Camera Search API
API Endpoint
기본 API Endpoint는 아래와 같으며, 현재 최신 버전은 2023-02
입니다.
https://api.kr.omnicommerce.ai/2022-08/
https://api.kr.omnicommerce.ai/2023-02/
새로운 검색
POST /similar-items/search: 새로운 검색
이미지를 url 또는 Base64 형식으로 업로드하여 새로운 검색을 요청합니다.
Request Header
Name | Required | Type | Description |
---|---|---|---|
X-Api-Key | 필수 | String | API Key (참조: API 인증 가이드) |
Request Body
transactionId는 내부적으로 Unique Key로 처리되며 API 호출시 URL Path Parameter의 형태로도 사용됩니다. 이에 따라 [RFC3986]기준 URL Unsafe Characters 는 사용이 제한됩니다.
<space> / % < > [ ] { } | \ ^
Name | Required | Type | Description |
---|---|---|---|
image | 필수 | Object | 검색을 요청할 이미지에 대한 정보를 가지는 객체 |
├ image.type | 필수 | String | url 또는 base64 중 선택 |
└ image.content | 필수 | String | image.type이 url 인 경우: 검색 요청 이미지의 url image.type이 base64인 경우: base64로 인코딩 된 검색 요청 이미지 파일 (참조: Image Guide) |
transactionId | 선택 | String | 재검색을 위한 요청 Id. 값이 없을 경우 임의의 값을 지정하여 할당. |
limit | 선택 | String | 추천 결과로 보여줄 상품의 최대 수량 (기본값: 10, 최대값: 100) |
showInfo | 선택 | List[String] | 추천 결과로 보여줄 부가 정보 선택 (복수 선택 가능) [METADATA, IMAGE_INFO, CONTEXT_INFO] |
metadataFilter | Object | Metadata Filter Query (참조: Metadata Filter) |
Request Example
Base64 이미지 검색 예시
{
"image": {
"type": "base64",
"content": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQYV2Poi5b8DwAEfwICWoNPegAAAABJRU5ErkJggg=="
},
"transactionId": "A14425770",
"showInfo" : ["METADATA", "IMAGE_INFO", "CONTEXT_INFO"]
}
Url 이미지 검색 예시
{
"image": {
"type": "url",
"content": "http://imageserver.net/some/image.jpeg"
},
"transactionId": "A14425770",
"showInfo": ["METADATA", "IMAGE_INFO", "CONTEXT_INFO"]
}
filter 적용 예시
{
"image": {
"type": "url",
"content": "http://imageserver.net/some/image.jpeg"
},
"transactionId": "A14425770",
"limit": 100,
"showInfo": ["METADATA", "IMAGE_INFO", "CONTEXT_INFO"],
"metadataFilter" : {
"productName": {
"eq": "skirt"
}
}
}
Response
Name | Type | Description |
---|---|---|
transactionId | String | 재검색을 위한 요청 Id. 값이 없을 경우 임의의 값을 지정하여 할당. |
limit | integer | 추천 결과로 보여줄 상품의 최대 수량 |
expirationDate | String | 결과 만료 시간 (isoformat, UTC) |
showInfo | List[String] | 추천 결과로 보여줄 부가 정보 |
metadataFilter | Object | Metadata Filter Query (참조: Metadata Filter) |
results | List[Object] | 검색 요청 이미지에서 검출된 상품 및 추천 정보 |
├ results[].object | Object | 요청 이미지에서 검출된 object 에 대한 정보 |
ㅤ├ results[].object.id | String | 검색 요청 이미지에서 검출된 상품에 대한 고유 id |
ㅤ├ results[].object.detection | String | 모델이 예측한 Detection Category 정보 (참조: [Detection 정보]) |
ㅤ└ results[].object.position | Object | 검출된 상품의 중심 위치. 이미지 내에서의 중심 위치를 0~1 사이의 값을 가진 상대좌표로 나타냄 |
ㅤㅤ├ results[].object.position.x | Number | 상품의 중심 위치의 x축 좌표 |
ㅤㅤ└ results[].object.position.y | Number | 상품의 중심 위치의 y축 좌표 |
└ results[].recommendation | List[Recommendation] | 검출된 상품을 중심으로 한 추천 목록 (아래 표 참조) |
추천 결과 항목
Name | Type | Description |
---|---|---|
order | Integer | 유사도 순으로 정렬된 순서 (0부터 시작) |
id | String | 추천된 상품 아이디 |
similarityScore | float | 0~1 사이 ,값을 기준으로 높을수록 유사도가 높은 형태 [해당 항목은 2023-02 version 에서만 제공됩니다.] |
metadata | Object | 추천된 상품의 Meta 정보. showInfo 의 입력값으로 METADATA 가 있는 경우 [상품 Meta정보] 형식의 데이터를 표시. 값이 없는 경우 null (기본값) |
imageInfo | Object | 추천된 상품의 이미지 정보. showInfo 의 입력값으로 IMAGE_INFO가 있는 경우 값을 표시. 값이 없는 경우 Null (기본값) |
├ imageInfo.detection | String | 추천된 상품의 Detection 정보 (참조: [Detection 정보]) |
└ imageInfo.url | String | 추천된 상품의 대표이미지 URL |
contextInfo | Object | 추천된 상품의 Context 정보. showInfo 의 입력값으로 CONTEXT_INFO가 있는 경우 값을 표시. 값이 없는 경우 null (기본값) |
├ contextInfo.salesUrl | String | 추천된 상품의 판매 페이지 URL |
└ contextInfo.mobileSalesUrl | String | 추천된 상품의 모바일 버전 판매 페이지 URL |
Response Example
400 Bad Request
잘못된 입력 Format
{
"errors": "json format error."
}
Index가 준비되지 않아 상품 추천을 할 수 없는 경우.
Index 계산은 하루에 한 번(0시) 이루어집니다. 만약 Workspace에 상품 정보를 새로 입력한 경우 하루가 지난 이후부터 추천이 정상적으로 이루어집니다.
{
"errors": "No product id exists."
}
HTTP Status Code : 200
아래와 같은 경우
- 이미지로부터 어떠한 상품도 검출되지 않은 경우
- 상품이 존재하지 않는 경우
{
"transactionId": "b3057c85-676d-4dec-9b45-d2eec1594df8",
"limit": 10,
"expirationDate": "2022-09-20T00:05:23",
"metadataFilter" : {
"productName": {"eq": "skirt"}
},
"showInfo": [
"METADATA",
"IMAGE_INFO",
"CONTEXT_INFO"
],
"results": []
}
3개의 상품을 검출했지만 검출된 3개의 상품 모두 추천 결과가 없는 경우
펼쳐서 보기
{
"transactionId": "b3057c85-676d-4dec-9b45-d2eec1594df8",
"limit": 10,
"showInfo": [
"METADATA",
"IMAGE_INFO",
"CONTEXT_INFO"
],
"expirationDate": "2022-09-20T00:05:23",
"metadataFilter" : {"productName": {"eq": "skirt"}},
"results": [
{
"object": {
"id": "0",
"detection": "TOP",
"position": {
"x": 0.36875,
"y": 0.46640627500000004
}
},
"recommendation": []
},
{
"object": {
"id": "1",
"detection": "BAG",
"position": {
"x": 0.36875,
"y": 0.46640627500000004
}
},
"recommendation": []
},
{
"object": {
"id": "2",
"detection": "SHOES",
"position": {
"x": 0.36875,
"y": 0.46640627500000004
}
},
"recommendation": []
}
]
}
HTTP Status Code : 201
3개의 상품이 검출되었고, 검출된 상품 중 하나 이상의 추천 결과가 있는 경우
펼쳐서 보기
{
"transactionId": "b3057c85-676d-4dec-9b45-d2eec1594df8",
"limit": 10,
"showInfo": [
"METADATA",
"IMAGE_INFO",
"CONTEXT_INFO"
],
"expirationDate": "2022-09-20T00:05:23",
"metadataFilter" : {"productName": {"eq": "skirt"}},
"results": [
{
"object": {
"id": "0",
"detection": "TOP",
"position": {
"x": 0.36875,
"y": 0.46640627500000004
}
},
"recommendation": []
},
{
"object": {
"id": "1",
"detection": "BAG",
"position": {
"x": 0.36875,
"y": 0.46640627500000004
}
},
"recommendation": [
{
"order": 0,
"id": "66ff313a806eddfe0ffd8276d670131a",
"similarityScore": 0.99,
"metadata": {
"name": "d",
"price": 400
},
"imageInfo": {
"detection": "TOP",
"url": "http://imageserverurl/some.image.jpg"
},
"contextInfo": {
"salesUrl": "https://www.example.com/p/example",,
"mobileSalesUrl": "https://www.example.com/p/example",
}
},
{
"order": 1,
"id": "98deb22e5caf6239fcf7191e09630fa9",
"similarityScore": 0.98,
"metadata": {
"name": "d",
"price": 400
},
"imageInfo": {
"detection": "TOP",
"url": "http://imageserverurl/some.image.jpg"
},
"contextInfo": {
"salesUrl": "https://www.example.com/p/example",,
"mobileSalesUrl": "http://imageserverurl/some.image.jpg"
}
},
{
"order": 2,
"id": "df8335f51c53addbe3d4eee529eac8fb",
"similarityScore": 0.97,
"metadata": {
"name": "d",
"price": 400
},
"imageInfo": {
"detection": "TOP",
"url": "http://imageserverurl/some.image.jpg"
},
"contextInfo": {
"salesUrl": "https://www.example.com/p/example",
"mobileSalesUrl": "http://imageserverurl/m/example"
}
}
]
},
{
"object": {
"id": "2",
"detection": "SHOES",
"position": {
"x": 0.36875,
"y": 0.46640627500000004
}
},
"recommendation": []
}
]
}
결과 내 재검색
요청 이미지를 새롭게 업로드하지 않고 POST /similar-items/search: 새로운 검색 의 Response로 받은 Transaction ID와 Object ID 에 해당하는 검색 결과를 가져옵니다. 새로운 검색과 다르게 빠르게 응답을 받을 수 있고 Metadata 기준으로 추천 결과 값을 Filtering 할 수 있습니다.
결과 내 재검색 결과는 일정 시간이 지나면 만료가 됩니다. 만료 시각은 Response 값의 expirationDate
Field 를 통해 확인할 수 있으며, 만료가 된 결과를 요청하면 400 Bad Request
를 리턴합니다.
GET /similar-items/search/<transaction id>/<object id>: 결과 내 재검색
Transaction ID와 Object ID 에 해당하는 검색 결과를 가져옵니다.
Request Header
Name | Required | Type | Description |
---|---|---|---|
X-Api-Key | 필수 | String | API Key (참조: API 인증 가이드) |
Path Parameter
Name | Required | Type | Description |
---|---|---|---|
transaction id | 필수 | String | 새로운 검색 API 호출 시 응답으로 받은 요청 id |
object id | 필수 | String | 새로운 검색 API 호출 시 검출된 상품에 대한 고유 id (results[].id ) |
Request Parameter
Name | Required | Type | Description |
---|---|---|---|
limit | 선택 | String | 추천 결과로 보여줄 상품의 최대 수량 (기본값: 10, 최대값: 500) |
showInfo | 선택 | List[String] | 추천 결과로 보여줄 부가 정보 선택 (복수 선택 가능) [METADATA, IMAGE_INFO, CONTEXT_INFO] |
metadataFilter | 선택 | String | Metadata Filter Query (참조: Metadata Filter) |
Request Example
1. metadata, imageInfo, contextInfo 정보를 모두 포함하여 최대 100개 까지의 추천 결과를 받고자 하는 경우
2. metadata, contextInfo 정보만 포함하고, 최대 100개 까지의 추천 결과를 받으며, 추천결과 각 상품의 metadata 의 name 은 skirt 인 경우
3. contextInfo 정보만 포함하고, 최대 500개 까지의 추천 결과를 받으며, 추천결과 각 상품의 metadata 의 name 은 skirt 이며 각 상품의 item 은 cardigun 인 경우
Response
Name | Type | Description |
---|---|---|
transactionId | String | 새로운 검색 API 호출 시 응답으로 받은 요청 id |
limit | integer | 추천 결과로 보여줄 상품의 최대 수량 |
expirationDate | String | 결과 만료 시간 (isoformat, UTC) |
showInfo | List[String] | 추천 결과로 보여줄 부가 정보 |
metadataFilter | Object | Metadata Filter Query (참조: Metadata Filter) |
object | Object | 검색 요청 이미지에서 검출된 상품 정보 |
├ object.id | String | 검색 요청 이미지에서 검출된 상품에 대한 고유 id |
├ object.detection | String | 모델이 예측한 Detection Category 정보 (참조: [Detection 정보]) |
└ object.position | Object | 검출된 상품의 중심 위치. 이미지 내에서의 중심 위치를 0~1 사이의 값을 가진 상대좌표로 나타냄 |
ㅤ├ object.position.x | Number | 상품의 중심 위치의 x축 좌표 |
ㅤ└ object.position.y | Number | 상품의 중심 위치의 y축 좌표 |
recommendation | List[Recommendation] | 추천 결과 항목 (아래 표 참조) |
Recommendation
Name | Type | Description |
---|---|---|
order | Integer | 유사도 순으로 정렬된 순서 (0부터 시작) |
id | String | 추천된 상품 아이디 |
similarityScore | float | 0~1 사이 ,값을 기준으로 높을수록 유사도가 높은 형태 [해당 항목은 2023-02 version 에서만 제공됩니다.] |
metadata | Object | 추천된 상품의 Meta 정보. showInfo 의 입력값으로 METADATA 가 있는 경우 상품 Metadata 형식의 데이터를 표시. 값이 없는 경우 Null (기본값) |
imageInfo | Object | 추천된 상품의 이미지 정보. showInfo 의 입력값으로 IMAGE_INFO가 있는 경우 값을 표시. 값이 없는 경우 Null (기본값) |
├ imageInfo.detection | String | 추천된 상품의 Detection 정보 |
└ imageInfo.url | String | 추천된 상품의 대표이미지 URL |
contextInfo | Object | 추천된 상품의 Context 정보. showInfo 의 입력값으로 CONTEXT_INFO 가 있는 경우 값을 표시. 값이 없는 경우 Null (기본값) |
├ contextInfo.salesUrl | String | 추천된 상품의 판매 페이지 URL |
└ contextInfo.mobileSalesUrl | String | 추천된 상품의 모바일 버전 판매 페이지 URL |
Example Responses
HTTP Status Code: 400 Bad Request
결과가 존재하지 않거나 만료된 경우
{
"errors": "Transaction 'b3057c85-676d-4dec-9b45-d2eec1594df8' not exist or expired"
}
HTTP Status Code : 200
이미지로부터 어떠한 상품도 검출되지 않은 경우
{
"transactionId": "b3057c85-676d-4dec-9b45-d2eec1594df8",
"limit": 10,
"expirationDate": "2022-09-20T00:05:23",
"showInfo": ["METADATA","IMAGE_INFO"],
"metadataFilter": {
"productName": {
"eq": "skirt"
}
},
"object": {
"id": "0",
"detection": "TOP",
"position": {
"x": 0.36875,
"y": 0.46640627500000004
}
},
"recommendation": []
}
HTTP Status Code : 201
한 개 이상의 상품이 추천 된경우
펼쳐서 보기
{
"transactionId": "b3057c85-676d-4dec-9b45-d2eec1594df8",
"limit": 10,
"expirationDate": "2022-09-20T00:05:23",
"showInfo": [],
"metadataFilter": {
"productName": {
"eq": "skirt"
}
},
"object": {
"id": "0",
"detection": "TOP",
"position": {
"x": 0.36875,
"y": 0.46640627500000004
}
},
"recommendation": [
{
"order": 0,
"id": "AT000123FB",
"similarityScore": 0.99,
"metadata": null,
"imageInfo": null,
"contextInfo": null
},
{
"order": 1,
"id": "AT00158AE",
"similarityScore": 0.98,
"metadata": null,
"imageInfo": null,
"contextInfo": null
},
{
"order": 2,
"id": "F800158GA",
"similarityScore": 0.97,
"metadata": null,
"imageInfo": null,
"contextInfo": null
},
{
"order": 3,
"id": "AF10881GK",
"similarityScore": 0.96,
"metadata": null,
"imageInfo": null,
"contextInfo": null
}
]
}
Metadata 정보 포함, ImageInfo 정보, contextInfo 정보 포함
펼쳐서 보기
{
"transactionId": "b3057c85-676d-4dec-9b45-d2eec1594df8",
"limit": 10,
"expirationDate": "2022-09-20T00:05:23",
"showInfo": ["METADATA","IMAGE_INFO", "CONTEXT_INFO"],
"metadataFilter": {
"productName": {
"eq": "skirt"
}
},
"object": {
"id": "0",
"detection": "TOP",
"position": {
"x": 0.36875,
"y": 0.46640627500000004
}
},
"recommendation": [
{
"order": 0,
"id": "AT000123FB",
"similarityScore": 0.99,
"metadata": {
"productName": "a",
"originPrice": 100
},
"imageInfo": {
"detection": "TOP",
"url": "http://imageserverurl/some.image.jpg"
},
"contextInfo": {
"salesUrl": "http://imageserverurl/some.image.jpg",
"mobileSalesUrl": "http://imageserverurl/some.image.jpg"
}
},
{
"order": 1,
"id": "AT00158AE",
"similarityScore": 0.98,
"metadata": {
"productName": "b",
"originPrice": 200
},
"imageInfo": {
"detection": "TOP",
"url": "http://imageserverurl/some.image.jpg"
},
"contextInfo": {
"salesUrl": "http://imageserverurl/some.image.jpg",
"mobileSalesUrl": "http://imageserverurl/some.image.jpg"
}
},
{
"order": 2,
"id": "F800158GA",
"similarityScore": 0.97,
"metadata": {
"productName": "c",
"originPrice": 300
},
"imageInfo": {
"detection": "TOP",
"url": "http://imageserverurl/some.image.jpg"
},
"contextInfo": {
"salesUrl": "http://imageserverurl/some.image.jpg",
"mobileSalesUrl": null
}
},
{
"order": 3,
"id": "AF10881GK",
"similarityScore": 0.96,
"metadata": {
"productName": "d",
"originPrice": 400
},
"imageInfo": {
"detection": "TOP",
"url": "http://imageserverurl/some.image.jpg"
},
"contextInfo": {
"salesUrl": null,
"mobileSalesUrl": "http://imageserverurl/some.image.jpg"
}
}
]
}
POST /similar-items/search/<transaction id>/<object id>: 결과 내 재검색
Transaction ID와 Object ID 에 해당하는 검색 결과를 가져옵니다.
Request Header
Name | Required | Type | Description |
---|---|---|---|
X-Api-Key | 필수 | String | API Key (참조: API 인증 가이드) |
Content-Type | 필수 | String | 요청 Type. Application/json 만 지원합니다. |
Path Parameter
Name | Required | Type | Description |
---|---|---|---|
transaction id | 필수 | String | 새로운 검색 API 호출 시 응답으로 받은 요청 id |
object id | 필수 | String | 새로운 검색 API 호출 시 검출된 상품에 대한 고유 id (results[].id ) |
Request Body
Name | Required | Type | Description |
---|---|---|---|
limit | 선택 | String | 추천 결과로 보여줄 상품의 최대 수량 (기본값: 10, 최대값: 500) |
showInfo | 선택 | List[String] | 추천 결과로 보여줄 부가 정보 선택 (복수 선택 가능) [METADATA, IMAGE_INFO, CONTEXT_INFO] |
metadataFilter | 선택 | String | Metadata Filter Query (참조: Metadata Filter) |
Request Example
metadata, imageInfo, contextInfo 정보를 모두 포함하여 최대 100개 까지의 추천 결과를 받고자 하는 경우
{
"limit": 100,
"showInfo": ["METADATA", "IMAGE_INFO", "CONTEXT_INFO"],
}
metadata, contextInfo 정보만 포함하고, 최대 100개 까지의 추천 결과를 받으며, 추천결과 각 상품의 metadata 의 name 은 skirt 인 경우
{
"limit": 100,
"showInfo": ["METADATA", "CONTEXT_INFO"],
"metadataFilter" : {
"productName": {
"eq": "skirt"
}
}
}
Response
Name | Type | Description |
---|---|---|
transactionId | String | 새로운 검색 API 호출 시 응답으로 받은 요청 id |
limit | integer | 추천 결과로 보여줄 상품의 최대 수량 |
expirationDate | String | 결과 만료 시간 (isoformat, UTC) |
showInfo | List[String] | 추천 결과로 보여줄 부가 정보 |
metadataFilter | Object | Metadata Filter Query (참조: Metadata Filter) |
object | Object | 검색 요청 이미지에서 검출된 상품 정보 |
├ object.id | String | 검색 요청 이미지에서 검출된 상품에 대한 고유 id |
├ object.detection | String | 모델이 예측한 Detection Category 정보 (참조: [Detection 정보]) |
└ object.position | Object | 검출된 상품의 중심 위치. 이미지 내에서의 중심 위치를 0~1 사이의 값을 가진 상대좌표로 나타냄 |
ㅤ├ object.position.x | Number | 상품의 중심 위치의 x축 좌표 |
ㅤ└ object.position.y | Number | 상품의 중심 위치의 y축 좌표 |
recommendation | List[Recommendation] | 추천 결과 항목 (아래 표 참조) |
Recommendation
Name | Type | Description |
---|---|---|
order | Integer | 유사도 순으로 정렬된 순서 (0부터 시작) |
id | String | 추천된 상품 아이디 |
similarityScore | float | 0~1 사이 ,값을 기준으로 높을수로 유사도가 높은 형태 [해당 항목은 2023-02 version 에서만 제공됩니다.] |
metadata | Object | 추천된 상품의 Meta 정보. showInfo 의 입력값으로 METADATA 가 있는 경우 상품 Metadata 형식의 데이터를 표시. 값이 없는 경우 Null (기본값) |
imageInfo | Object | 추천된 상품의 이미지 정보. showInfo 의 입력값으로 IMAGE_INFO가 있는 경우 값을 표시. 값이 없는 경우 Null (기본값) |
├ imageInfo.detection | String | 추천된 상품의 Detection 정보 |
└ imageInfo.url | String | 추천된 상품의 대표이미지 URL |
contextInfo | Object | 추천된 상품의 Context 정보. showInfo 의 입력값으로 CONTEXT_INFO 가 있는 경우 값을 표시. 값이 없는 경우 Null (기본값) |
├ contextInfo.salesUrl | String | 추천된 상품의 판매 페이지 URL |
└ contextInfo.mobileSalesUrl | String | 추천된 상품의 모바일 버전 판매 페이지 URL |
Example Responses
HTTP Status Code: 400 Bad Request
결과가 존재하지 않거나 만료된 경우
{
"errors": "Transaction 'b3057c85-676d-4dec-9b45-d2eec1594df8' not exist or expired"
}
HTTP Status Code : 200
이미지로부터 어떠한 상품도 검출되지 않은 경우
{
"transactionId": "b3057c85-676d-4dec-9b45-d2eec1594df8",
"limit": 10,
"showInfo": ["METADATA","IMAGE_INFO"],
"metadataFilter": {
"productName": {
"eq": "skirt"
}
},
"object": {
"id": "0",
"detection": "TOP",
"position": {
"x": 0.36875,
"y": 0.46640627500000004
}
},
"recommendation": []
}
HTTP Status Code : 201
한 개 이상의 상품이 추천 된경우
펼쳐서 보기
{
"transactionId": "b3057c85-676d-4dec-9b45-d2eec1594df8",
"limit": 10,
"expirationDate": "2022-09-20T00:05:23",
"showInfo": [],
"metadataFilter": {
"productName": {
"eq": "skirt"
}
},
"object": {
"id": "0",
"detection": "TOP",
"position": {
"x": 0.36875,
"y": 0.46640627500000004
}
},
"recommendation": [
{
"order": 0,
"id": "AT000123FB",
"similarityScore": 0.99,
"metadata": null,
"imageInfo": null,
"contextInfo": null
},
{
"order": 1,
"id": "AT00158AE",
"similarityScore": 0.98,
"metadata": null,
"imageInfo": null,
"contextInfo": null
},
{
"order": 2,
"id": "F800158GA",
"similarityScore": 0.97,
"metadata": null,
"imageInfo": null,
"contextInfo": null
},
{
"order": 3,
"id": "AF10881GK",
"similarityScore": 0.96,
"metadata": null,
"imageInfo": null,
"contextInfo": null
}
]
}
Metadata 정보 포함, ImageInfo 정보, contextInfo 정보 포함
펼쳐서 보기
{
"transactionId": "b3057c85-676d-4dec-9b45-d2eec1594df8",
"limit": 10,
"expirationDate": "2022-09-20T00:05:23",
"showInfo": ["METADATA","IMAGE_INFO", "CONTEXT_INFO"],
"metadataFilter": {
"productName": {
"eq": "skirt"
}
},
"object": {
"id": "0",
"detection": "TOP",
"position": {
"x": 0.36875,
"y": 0.46640627500000004
}
},
"recommendation": [
{
"order": 0,
"id": "AT000123FB",
"similarityScore": 0.99,
"metadata": {
"productName": "a",
"originPrice": 100
},
"imageInfo": {
"detection": "TOP",
"url": "http://imageserverurl/some.image.jpg"
},
"contextInfo": {
"salesUrl": "http://imageserverurl/some.image.jpg",
"mobileSalesUrl": "http://imageserverurl/some.image.jpg"
}
},
{
"order": 1,
"id": "AT00158AE",
"similarityScore": 0.98,
"metadata": {
"productName": "b",
"originPrice": 200
},
"imageInfo": {
"detection": "TOP",
"url": "http://imageserverurl/some.image.jpg"
},
"contextInfo": {
"salesUrl": "http://imageserverurl/some.image.jpg",
"mobileSalesUrl": "http://imageserverurl/some.image.jpg"
}
},
{
"order": 2,
"id": "F800158GA",
"similarityScore": 0.97,
"metadata": {
"productName": "c",
"originPrice": 300
},
"imageInfo": {
"detection": "TOP",
"url": "http://imageserverurl/some.image.jpg"
},
"contextInfo": {
"salesUrl": "http://imageserverurl/some.image.jpg",
"mobileSalesUrl": null
}
},
{
"order": 3,
"id": "AF10881GK",
"similarityScore": 0.96,
"metadata": {
"productName": "d",
"originPrice": 400
},
"imageInfo": {
"detection": "TOP",
"url": "http://imageserverurl/some.image.jpg"
},
"contextInfo": {
"salesUrl": null,
"mobileSalesUrl": "http://imageserverurl/some.image.jpg"
}
}
]
}