Developer API

IndexUp API

프로그래밍 방식으로 URL 색인을 요청하세요. 간단한 REST API로 대량 URL 색인, 상태 확인, 크레딧 관리가 가능합니다.

Base URL: https://indexup.kr/api/v1

시작하기

IndexUp API를 사용하면 외부 애플리케이션에서 프로그래밍 방식으로 URL 색인을 요청할 수 있습니다. API를 사용하려면 다음 단계를 따르세요.

1

회원가입 및 요금제 선택

API 접근은 Starter 요금제 이상에서 사용 가능합니다. 요금제 보기

2

API 키 발급

마이페이지 > API 키에서 API 키를 생성하세요.

3

API 호출

발급받은 API 키를 사용하여 아래 엔드포인트를 호출하세요.

인증

모든 API 요청에는 인증이 필요합니다. 다음 두 가지 방법 중 하나를 사용하세요.

Authorization 헤더 (권장)
Authorization: Bearer ixup_your_api_key_here
X-API-Key 헤더
X-API-Key: ixup_your_api_key_here

주의: API 키는 비밀 정보입니다. 클라이언트 측 코드(프론트엔드, 모바일 앱)에 노출하지 마세요. 반드시 서버 측에서만 사용하세요.

URL 색인 요청

POST/api/v1/submit

하나 이상의 URL을 색인 요청합니다.

요청 헤더

Content-Type: application/json
Authorization: Bearer ixup_your_api_key_here

요청 본문

JSON
{
  "urls": [
    "https://example.com/page1",
    "https://example.com/page2"
  ]
}

성공 응답 (200)

{
  "success": true,
  "data": {
    "batch_id": "abc-123-def-456",
    "urls_submitted": 2,
    "credits_used": 2,
    "credits_remaining": 198
  }
}

에러 응답

{
  "statusCode": 429,
  "message": "월간 색인 요청 한도를 초과했습니다."
}
참고: 한 번에 제출 가능한 URL 수는 요금제의 일일 한도에 따라 제한됩니다.

상태 확인

GET/api/v1/status/:batch_id

제출한 배치의 색인 처리 상태를 확인합니다.

경로 파라미터

파라미터타입설명
batch_idstring색인 요청 시 반환된 배치 ID

성공 응답 (200)

{
  "success": true,
  "data": {
    "batch_id": "abc-123-def-456",
    "urls": [
      {
        "url": "https://example.com/page1",
        "status": "done",
        "submitted_at": "2026-04-12 14:30:00"
      },
      {
        "url": "https://example.com/page2",
        "status": "processing",
        "submitted_at": "2026-04-12 14:30:00"
      }
    ]
  }
}
상태값:pending (대기) | processing (처리중) | done (완료) | failed (실패)

크레딧 확인

GET/api/v1/credits

현재 요금제의 크레딧 사용량과 잔여량을 확인합니다.

성공 응답 (200)

{
  "success": true,
  "data": {
    "plan": "Pro",
    "monthly_credits": 10000,
    "used_this_month": 3500,
    "remaining": 6500,
    "resets_at": "2026-05-01"
  }
}

제출 기록

GET/api/v1/history

색인 요청 이력을 페이지네이션으로 조회합니다.

쿼리 파라미터

파라미터기본값설명
page1페이지 번호
per_page50페이지당 항목 수 (최대 100)

성공 응답 (200)

{
  "success": true,
  "data": {
    "submissions": [
      {
        "batch_id": "abc-123",
        "url": "https://example.com/page1",
        "status": "done",
        "submitted_at": "2026-04-12 14:30:00"
      }
    ],
    "total": 150,
    "page": 1,
    "per_page": 50
  }
}

에러 코드

API 요청 실패 시 다음과 같은 에러 코드가 반환됩니다.

코드의미설명
400Bad Request잘못된 요청 형식 (URL 누락, 잘못된 URL 등)
401UnauthorizedAPI 키가 누락되었거나 유효하지 않음
403ForbiddenAPI 키 비활성화, 계정 차단, 또는 요금제 미달
404Not Found요청한 리소스를 찾을 수 없음
429Too Many Requests요청 한도 초과 (분당 또는 월간)

에러 응답 형식

{
  "statusCode": 401,
  "message": "유효하지 않은 API 키입니다."
}

요금제별 제한

API 사용량은 요금제에 따라 제한됩니다.

요금제월간 크레딧일일 한도분당 요청API 접근
Free30010-불가
Starter2,00010030가능
Pro10,000500120가능
Business50,0002,500600가능
429 응답 시 Retry-After 헤더에 재시도 가능 시간(초)이 포함됩니다.

코드 예제

다양한 언어에서 IndexUp API를 사용하는 예제입니다.

cURL

URL 색인 요청
curl -X POST https://indexup.kr/api/v1/submit \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ixup_your_api_key_here" \
  -d '{
    "urls": [
      "https://example.com/page1",
      "https://example.com/page2"
    ]
  }'
크레딧 확인
curl https://indexup.kr/api/v1/credits \
  -H "Authorization: Bearer ixup_your_api_key_here"

Python

python
import requests

API_KEY = "ixup_your_api_key_here"
BASE_URL = "https://indexup.kr/api/v1"
headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json"
}

# URL 색인 요청
response = requests.post(f"{BASE_URL}/submit", json={
    "urls": [
        "https://example.com/page1",
        "https://example.com/page2"
    ]
}, headers=headers)

result = response.json()
print(f"배치 ID: {result['data']['batch_id']}")
print(f"사용 크레딧: {result['data']['credits_used']}")

# 상태 확인
batch_id = result["data"]["batch_id"]
status = requests.get(
    f"{BASE_URL}/status/{batch_id}",
    headers=headers
).json()

for url_info in status["data"]["urls"]:
    print(f"{url_info['url']}: {url_info['status']}")

Node.js

javascript
const API_KEY = 'ixup_your_api_key_here';
const BASE_URL = 'https://indexup.kr/api/v1';

// URL 색인 요청
const response = await fetch(`${BASE_URL}/submit`, {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    urls: [
      'https://example.com/page1',
      'https://example.com/page2',
    ],
  }),
});

const result = await response.json();
console.log(`배치 ID: ${result.data.batch_id}`);

// 크레딧 확인
const credits = await fetch(`${BASE_URL}/credits`, {
  headers: { 'Authorization': `Bearer ${API_KEY}` },
}).then(r => r.json());

console.log(`남은 크레딧: ${credits.data.remaining}`);

PHP

php
<?php
$apiKey = 'ixup_your_api_key_here';
$baseUrl = 'https://indexup.kr/api/v1';

// URL 색인 요청
$ch = curl_init("$baseUrl/submit");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer $apiKey",
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'urls' => [
            'https://example.com/page1',
            'https://example.com/page2',
        ],
    ]),
]);

$response = curl_exec($ch);
curl_close($ch);

$result = json_decode($response, true);
echo "배치 ID: " . $result['data']['batch_id'] . "\n";
echo "사용 크레딧: " . $result['data']['credits_used'] . "\n";
?>