# 앱 리뷰 조회



앱스토어에 등록된 앱의 정보(평점·평가 수·가격·장르)와 고객 리뷰를 한 번에 받습니다. 앱 ID 하나로 앱 개요와 최신 리뷰를 함께 확인할 때 씁니다.



인증: Authorization: Bearer $APICK_API_KEY

본문 있는 REST 요청: multipart/form-data. GET 본문 및 MCP JSON-RPC 규격은 해당 명세를 따릅니다.

인증키는 서버에 보관하세요. 모든 예제는 정적 자료입니다.



## POST /rest/app_reviews 응답 필드

- `data` (object): 아래 하위 항목을 확인하세요.

- `data.appId` (string): 아래 하위 항목을 확인하세요.

- `data.country` (string): 아래 하위 항목을 확인하세요.

- `data.page` (integer): 아래 하위 항목을 확인하세요.

- `data.app` (object): 아래 하위 항목을 확인하세요.

- `data.app.name` (string): 아래 하위 항목을 확인하세요.

- `data.app.sellerName` (string): 아래 하위 항목을 확인하세요.

- `data.app.price` (integer): 아래 하위 항목을 확인하세요.

- `data.app.averageUserRating` (number): 아래 하위 항목을 확인하세요.

- `data.app.userRatingCount` (integer): 아래 하위 항목을 확인하세요.

- `data.app.genres` (array): 아래 하위 항목을 확인하세요.

- `data.reviews` (array): 아래 하위 항목을 확인하세요.

- `data.reviews[].id` (string): 아래 하위 항목을 확인하세요.

- `data.reviews[].author` (string): 아래 하위 항목을 확인하세요.

- `data.reviews[].rating` (integer): 아래 하위 항목을 확인하세요.

- `data.reviews[].version` (string): 아래 하위 항목을 확인하세요.

- `data.reviews[].title` (string): 아래 하위 항목을 확인하세요.

- `data.reviews[].content` (string): 아래 하위 항목을 확인하세요.

- `data.reviews[].updated` (string): 아래 하위 항목을 확인하세요.

- `data.reviewCount` (integer): 아래 하위 항목을 확인하세요.

- `api` (object): 아래 하위 항목을 확인하세요.

- `api.cost` (integer): 아래 하위 항목을 확인하세요.

- `api.success` (boolean): 아래 하위 항목을 확인하세요.

- `api.ms` (integer): 아래 하위 항목을 확인하세요.

## API 요청: POST /rest/app_reviews



### 입력

- `appId` (string, 필수): 앱스토어 앱 ID (숫자)

- `country` (string, 선택): 국가 코드 (기본 kr)

- `page` (integer, 선택): 리뷰 페이지 (기본 1, 최대 10)



### 응답 명세

```json

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "appId": {
          "type": "string"
        },
        "country": {
          "type": "string"
        },
        "page": {
          "type": "integer"
        },
        "app": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "sellerName": {
              "type": "string"
            },
            "price": {
              "type": "integer"
            },
            "averageUserRating": {
              "type": "number"
            },
            "userRatingCount": {
              "type": "integer"
            },
            "genres": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        },
        "reviews": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "author": {
                "type": "string"
              },
              "rating": {
                "type": "integer"
              },
              "version": {
                "type": "string"
              },
              "title": {
                "type": "string"
              },
              "content": {
                "type": "string"
              },
              "updated": {
                "type": "string"
              }
            }
          }
        },
        "reviewCount": {
          "type": "integer"
        }
      }
    },
    "api": {
      "type": "object",
      "properties": {
        "cost": {
          "type": "integer"
        },
        "success": {
          "type": "boolean"
        },
        "ms": {
          "type": "integer"
        }
      }
    }
  }
}

```

### 정적 응답 예시

```json

{
  "data": {
    "appId": "362057947",
    "country": "kr",
    "page": 1,
    "app": {
      "name": "앱 이름",
      "sellerName": "제공자",
      "price": 0,
      "averageUserRating": 4.5,
      "userRatingCount": 1200,
      "genres": [
        "유틸리티"
      ]
    },
    "reviews": [
      {
        "id": "1",
        "author": "사용자",
        "rating": 5,
        "version": "1.0",
        "title": "좋아요",
        "content": "잘 씁니다",
        "updated": "2026-01-01T00:00:00-07:00"
      }
    ],
    "reviewCount": 1
  },
  "api": {
    "cost": 100,
    "success": true,
    "ms": 320
  }
}

```

### curl

```curl

curl --fail-with-body --request POST 'https://apick.app/rest/app_reviews' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --form-string 'appId=362057947' \
  --form-string 'country=kr'

```

### Node.js (서버 ESM)

```javascript

const form = new FormData();
form.append("appId", "362057947");
form.append("country", "kr");
const response = await fetch("https://apick.app/rest/app_reviews", {
  method: "POST",
  headers: { Authorization: "Bearer " + process.env.APICK_API_KEY },
  body: form,
  signal: AbortSignal.timeout(120_000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
const result = await response.json();
console.log(result);

```

### python

```python

import os
import requests
parts = [
    ("appId", (None, "362057947")),
    ("country", (None, "kr")),
]
response = requests.request("POST", "https://apick.app/rest/app_reviews",
    headers={"Authorization": "Bearer " + os.environ["APICK_API_KEY"]},
    files=parts,
    timeout=(10, 120))
response.raise_for_status()
result = response.json()
print(result)

```

### php

```php

<?php
$headers = ["Authorization: Bearer " . getenv("APICK_API_KEY")];
$form = [
    'appId' => '362057947',
    'country' => 'kr',
];
$curl = curl_init('https://apick.app/rest/app_reviews');
curl_setopt_array($curl, [
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_POSTFIELDS => $form,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CONNECTTIMEOUT => 10, CURLOPT_TIMEOUT => 120,
]);
$body = curl_exec($curl);
if ($body === false) { throw new RuntimeException(curl_error($curl)); }
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($status >= 400) { throw new RuntimeException($body); }
$result = json_decode($body, true, 512, JSON_THROW_ON_ERROR);
print_r($result);

```

## 코드·오류

## 상세 기능·요금

이용 전 확인 성공한 조회 한 건당 100P가 차감됩니다. 리뷰가 없는 앱도 앱 정보를 찾으면 같은 요금이 적용됩니다. 실제 차감액은 응답의 api.cost에서 확인하세요. 리뷰는 한 페이지에 정해진 개수만 제공되며 오래된 리뷰는 page를 올려 받습니다. 전체 리뷰를 한 번에 내려받는 용도로는 쓸 수 없습니다. 인증키는 서버 환경변수에 보관하고 공개 저장소·웹페이지에 넣지 마세요.

## 상세 요청

항목설정 메서드·주소POST https://apick.app/rest/app_reviews 인증 헤더Authorization: Bearer — 내 계정의 API 인증키 본문 형식multipart/form-data 필수 항목appId — 앱스토어 앱 ID(숫자, 최대 12자리) 선택 항목country 앱스토어 국가 코드 두 글자(기본 kr), page 리뷰 페이지(기본 1, 최대 10) 요청 예시 국내 앱스토어에서 앱 정보와 첫 페이지 리뷰를 받는 예입니다. 성공 시 과금되는 실제 요청입니다. form-data 전체 예제 보기

## 상세 코드·정책

응답과 오류 복구 필드타입설명 data.appIdstring요청한 앱 ID입니다. data.countrystring조회한 앱스토어 국가 코드입니다. data.pageinteger조회한 리뷰 페이지입니다. data.appobject앱 정보입니다. 찾지 못하면 null입니다. data.app.namestring앱 이름입니다. data.app.sellerNamestring제공자 이름입니다. data.app.pricenumber판매 가격입니다. 무료는 0입니다. data.app.averageUserRatingnumber평균 평점입니다. 평가가 없으면 null입니다. data.app.userRatingCountinteger평가 수입니다. data.app.genres[]array장르 목록입니다. data.reviews[]array리뷰 목록입니다. 리뷰가 없으면 빈 배열입니다. data.reviews[].ratinginteger별점 1~5입니다. data.reviews[].contentstring리뷰 본문입니다. data.reviews[].updatedstring작성 시각입니다. data.reviewCountinteger이번 응답에 담긴 리뷰 수입니다. api.costinteger차감된 포인트입니다. 실패한 응답은 0입니다. api.msinteger처리 시간(밀리초)입니다. { "data": { "appId": "362057947", "country": "kr", "page": 1, "app": { "name": "앱 이름", "sellerName": "제공자", "price": 0, "averageUserRating": 4.5, "userRatingCount": 1200, "genres": ["유틸리티"] }, "reviews": [{ "id": "1", "author": "사용자", "rating": 5, "version": "1.0", "title": "좋아요", "content": "잘 씁니다", "updated": "2026-01-01T00:00:00-07:00" }], "reviewCount": 1 }, "api": { "cost": 100, "success": true, "ms": 320 } } 앱 ID가 숫자가 아니거나 국가 코드가 두 글자가 아니면 조회 전에 data.error로 실패합니다. 앱을 찾지 못하면 안내 문구와 함께 api.cost 0이 오고, 리뷰만 없는 앱은 data.reviews가 빈 배열로 성공합니다. 리뷰가 필요하면 page를 올려 순서대로 받으세요.
