ARNPROXY

위치 및 기간

GET/account/api/v1/catalog

권한 인증

AuthorizationBearer YOUR_ARNPROXY_API_KEY
필요한 권한read
Acceptapplication/json

매개변수

이름유형설명
product_id
query필수
integerproducts의 제품 ID, 1~2147483647.

추가 사용 예제

ID와 가격은 예시입니다. 카탈로그와 동일 견적의 실제 값을 사용하고 JSON ID 및 expected_total_minor는 숫자로 보내세요. 예제의 terms=false는 안전을 위한 값입니다. 실제 유료 작업에 대한 고객의 명시적 동의 후에만 terms=true를 보내세요.

사용 목적: 하위 목적만 선택

일반 주문에서 두 가지 목적을 따로 선택하게 하지 마세요. catalog.purposes에서 id=201을 찾고 children만 표시합니다. purchase의 purpose_id는 정수 201로 고정하고 subpurpose_id에는 선택한 하위 ID를 넣습니다. 기존 연동과의 호환성을 위해 카탈로그 계층 구조는 유지됩니다.

Node.js / JavaScript
const response = await fetch(
  'https://www.arnproxy.com/account/api/v1/catalog?product_id=' + productId,
  { headers: { Authorization: 'Bearer ' + apiKey } }
);
const catalog = await response.json();
if (!response.ok || !catalog.ok) throw new Error('Catalog request failed');
const purposeGroup = catalog.data.purposes.find(group => group.id === 201);
if (!purposeGroup) throw new Error('Purpose group 201 is not available');
const purposeOptions = purposeGroup.children.map(({ id, name }) => ({ id, name }));
// Show only purposeOptions. The customer selects selectedSubpurposeId.
const purchaseLine = {
  location_id: selectedLocationId,
  time_id: selectedTimeId,
  quantity: selectedQuantity,
  purpose_id: 201,
  subpurpose_id: selectedSubpurposeId
};
// Add other_purpose (1–30 characters) only when selectedSubpurposeId === -1.
// No purchase is sent by this example.

사용 목적: 하위 목적만 선택

일반 주문에서 두 가지 목적을 따로 선택하게 하지 마세요. catalog.purposes에서 id=201을 찾고 children만 표시합니다. purchase의 purpose_id는 정수 201로 고정하고 subpurpose_id에는 선택한 하위 ID를 넣습니다. 기존 연동과의 호환성을 위해 카탈로그 계층 구조는 유지됩니다.

Python
import json
import urllib.request

request = urllib.request.Request(
    'https://www.arnproxy.com/account/api/v1/catalog?product_id=' + str(product_id),
    headers={'Authorization': 'Bearer ' + api_key}
)
with urllib.request.urlopen(request, timeout=20) as response:
    catalog = json.load(response)
if not catalog.get('ok'):
    raise RuntimeError('Catalog request failed')
purpose_group = next((g for g in catalog['data']['purposes'] if g['id'] == 201), None)
if purpose_group is None:
    raise RuntimeError('Purpose group 201 is not available')
purpose_options = [{'id': p['id'], 'name': p['name']} for p in purpose_group['children']]
# Display only purpose_options; the customer selects selected_subpurpose_id.
purchase_line = {
    'location_id': selected_location_id,
    'time_id': selected_time_id,
    'quantity': selected_quantity,
    'purpose_id': 201,
    'subpurpose_id': selected_subpurpose_id,
}
# For Other (-1), also set other_purpose to 1–30 characters.
# This example does not submit a purchase.

요청 예제

cURL
printf 'Authorization: Bearer %s\n' "$ARNPROXY_API_KEY" |
  curl --silent --show-error --header @- \
    --header 'Accept: application/json' \
    --connect-timeout 10 --max-time 30 \
    'https://www.arnproxy.com/account/api/v1/catalog?product_id=FROM_PRODUCTS'

이 페이지에서는 예제를 실행하지 않습니다. API 키는 서버 환경 변수에 보관하고 URL이나 브라우저 코드에 넣지 마세요. POST 예제에는 request.json을 준비하세요.

응답

200성공 응답
application/json
{
    "ok": true,
    "data": {
        "product": {
            "id": 5,
            "name": "IPv4 Proxy",
            "minimum_quantity": 1
        },
        "currency": "TRY",
        "locations": [
            {
                "id": 10,
                "name": "Example country",
                "periods": [
                    {
                        "id": 101,
                        "name": "7 days",
                        "days": 7,
                        "base_unit_price": "10.0000"
                    }
                ]
            }
        ],
        "purposes": [
            {
                "id": 201,
                "name": "Purpose",
                "children": [
                    {
                        "id": 202,
                        "name": "Example purpose"
                    }
                ]
            }
        ],
        "discount_scope": "country",
        "stock_checked": false,
        "purchase_available": true
    },
    "meta": {
        "request_id": "000000000000000000000001",
        "phase": "public_v1",
        "source": "arnproxy_records"
    }
}
응답 필드 및 유형
이름유형설명
okboolean성공 여부. false이면 error.code를 확인하세요.
dataobject작업별 결과이며 예제는 설명용 합성 데이터입니다.
data.productobjectproduct의 작업별 값입니다. 반환된 유형을 유지하고 동작 설명을 확인하세요.
data.product.idinteger관련 ARNPROXY 기록 ID. 공급자 내부 ID 대신 사용하세요.
data.product.namestringname의 작업별 값입니다. 반환된 유형을 유지하고 동작 설명을 확인하세요.
data.product.minimum_quantityinteger해당 제품의 주문 행별 최소 수량.
data.currencystring계정 거래 통화: TRY 또는 USD.
data.locationsarraylocations의 작업별 값입니다. 반환된 유형을 유지하고 동작 설명을 확인하세요.
data.locations[]objectlocations의 작업별 값입니다. 반환된 유형을 유지하고 동작 설명을 확인하세요.
data.locations[].idinteger관련 ARNPROXY 기록 ID. 공급자 내부 ID 대신 사용하세요.
data.locations[].namestringname의 작업별 값입니다. 반환된 유형을 유지하고 동작 설명을 확인하세요.
data.locations[].periodsarrayperiods의 작업별 값입니다. 반환된 유형을 유지하고 동작 설명을 확인하세요.
data.locations[].periods[]objectperiods의 작업별 값입니다. 반환된 유형을 유지하고 동작 설명을 확인하세요.
data.locations[].periods[].idinteger관련 ARNPROXY 기록 ID. 공급자 내부 ID 대신 사용하세요.
data.locations[].periods[].namestringname의 작업별 값입니다. 반환된 유형을 유지하고 동작 설명을 확인하세요.
data.locations[].periods[].daysinteger요금제 기간(일). GB 요금제의 트래픽 양과 별개입니다.
data.locations[].periods[].base_unit_pricestringbase unit price의 작업별 값입니다. 반환된 유형을 유지하고 동작 설명을 확인하세요.
data.purposesarraypurposes의 작업별 값입니다. 반환된 유형을 유지하고 동작 설명을 확인하세요.
data.purposes[]objectpurposes의 작업별 값입니다. 반환된 유형을 유지하고 동작 설명을 확인하세요.
data.purposes[].idinteger관련 ARNPROXY 기록 ID. 공급자 내부 ID 대신 사용하세요.
data.purposes[].namestringname의 작업별 값입니다. 반환된 유형을 유지하고 동작 설명을 확인하세요.
data.purposes[].childrenarraychildren의 작업별 값입니다. 반환된 유형을 유지하고 동작 설명을 확인하세요.
data.purposes[].children[]objectchildren의 작업별 값입니다. 반환된 유형을 유지하고 동작 설명을 확인하세요.
data.purposes[].children[].idinteger관련 ARNPROXY 기록 ID. 공급자 내부 ID 대신 사용하세요.
data.purposes[].children[].namestringname의 작업별 값입니다. 반환된 유형을 유지하고 동작 설명을 확인하세요.
data.discount_scopestringdiscount scope의 작업별 값입니다. 반환된 유형을 유지하고 동작 설명을 확인하세요.
data.stock_checkedboolean가격/로컬 결과만으로 공급자나 재고가 보장되지는 않습니다.
data.purchase_availableboolean조건/권한에 따른 사용 가능 여부이며 재고나 공급자 보장은 아닙니다.
metaobject요청 추적 및 데이터 출처 메타데이터.
meta.request_idstring이 HTTP 요청의 추적 ID이며 작업 키나 주문 ID가 아닙니다.
meta.phasestringphase의 작업별 값입니다. 반환된 유형을 유지하고 동작 설명을 확인하세요.
meta.sourcestring데이터 출처. 로컬 기록과 실시간 공급자 조회는 서로 다른 근거입니다.

오류 응답

HTTP 401 · INVALID_API_KEY
{
  "ok": false,
  "error": { "code": "INVALID_API_KEY" },
  "meta": { "request_id": "000000000000000000000001" }
}

인증 및 검증 단계에서 실행 전에 요청이 거부될 수 있습니다. 오류 문서를 확인하고 지원 문의용 request_id를 보관하세요. 키나 비밀번호를 보내지 마세요. 오류 및 제한 →

동작 및 주요 참고 사항

  • ID는 products/catalog에서 가져오세요. quote 행에는 location_id, time_id, quantity만 포함합니다. purchase 행에는 purpose_id=201 및 선택한 subpurpose_id가 추가로 필요합니다.
  • 일반 주문에서 두 가지 목적을 따로 선택하게 하지 마세요. catalog.purposes에서 id=201을 찾고 children만 표시합니다. purchase의 purpose_id는 정수 201로 고정하고 subpurpose_id에는 선택한 하위 ID를 넣습니다. 기존 연동과의 호환성을 위해 카탈로그 계층 구조는 유지됩니다.
  • 기타를 선택하면 subpurpose_id=-1과 1–30자의 other_purpose를 보냅니다. 다른 선택에는 other_purpose가 필요하지 않습니다. purpose_id는 여전히 201입니다.

현재 언어로 검색합니다. 닫기: Esc