> ## Documentation Index
> Fetch the complete documentation index at: https://api-docs.voicecheap.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 인증

> VoiceCheap API 인증 방법을 알아보세요

# 인증

VoiceCheap API는 인증을 위해 API 키를 사용합니다. 모든 API 요청에는 `x-api-key` 헤더에 API 키가 포함되어야 합니다.

## API 키 발급받기

<Steps>
  <Step title="VoiceCheap에 로그인">
    [app.voicecheap.ai](https://app.voicecheap.ai)에 접속하여 계정에 로그인하세요.
  </Step>

  <Step title="API 페이지로 이동">
    [app.voicecheap.ai/page-api](https://app.voicecheap.ai/page-api)의 **API** 페이지로 이동하세요.
  </Step>

  <Step title="API 키 생성">
    **새 키 생성**을 클릭하고 키 이름을 지정하세요. 전체 API 키는 한 번만 표시되므로 즉시 복사하여 안전하게 보관하세요.
  </Step>
</Steps>

<Warning>
  **중요: 키를 즉시 저장하세요**

  전체 API 키는 생성 시 **한 번만** 표시됩니다. 모달을 닫으면 마스킹된 버전(`vc_abc...xyz`)만 볼 수 있습니다. 키를 분실하면 삭제 후 새로 생성해야 합니다.
</Warning>

## API 키 제한

* 계정당 **최대 5개의 API 키**를 생성할 수 있습니다
* 각 키는 쉽게 식별할 수 있도록 이름을 지정할 수 있습니다(예: "운영", "개발")
* 키는 API 페이지에서 언제든지 삭제할 수 있습니다

## API 키 사용

모든 요청 시 `x-api-key` 헤더에 API 키를 포함하세요:

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://api.voicecheap.ai/v1/translate \
    -H "x-api-key: vc_your-api-key-here" \
    -F "file=@video.mp4" \
    -F "targetLanguage=spanish"
  ```

  ```typescript TypeScript theme={null}
  const formData = new FormData();
  formData.append('file', videoFile);
  formData.append('targetLanguage', 'spanish');

  const response = await fetch('https://api.voicecheap.ai/v1/translate', {
    method: 'POST',
    headers: {
      'x-api-key': 'vc_your-api-key-here'
    },
    body: formData
  });

  const data = await response.json();
  ```

  ```javascript JavaScript theme={null}
  const formData = new FormData();
  formData.append('file', videoFile);
  formData.append('targetLanguage', 'spanish');

  const response = await fetch('https://api.voicecheap.ai/v1/translate', {
    method: 'POST',
    headers: {
      'x-api-key': 'vc_your-api-key-here'
    },
    body: formData
  });

  const data = await response.json();
  ```

  ```python Python theme={null}
  import requests

  files = {'file': open('video.mp4', 'rb')}
  data = {'targetLanguage': 'spanish'}
  headers = {'x-api-key': 'vc_your-api-key-here'}

  response = requests.post(
      'https://api.voicecheap.ai/v1/translate',
      headers=headers,
      files=files,
      data=data
  )
  ```
</CodeGroup>

## 요구 사항

<Warning>
  **유료 구독 필요**

  API를 사용하려면 활성화된 유료 구독이 필요합니다. 무료 계정은 API를 사용할 수 없습니다. 유효한 구독 없이 API를 사용하려고 하면 `403 Forbidden` 오류가 발생합니다.
</Warning>

## API 키 보안

<CardGroup cols={2}>
  <Card title="비밀 유지" icon="lock">
    API 키를 클라이언트 측 코드, 공개 저장소 또는 공개적으로 접근 가능한 위치에 절대 노출하지 마세요.
  </Card>

  <Card title="환경 변수 사용" icon="shield">
    API 키를 환경 변수나 안전한 보안 관리자에 저장하세요.
  </Card>

  <Card title="정기적인 교체" icon="rotate">
    API 키가 유출되었을 가능성이 있는 경우, 주기적으로 키를 교체하세요.
  </Card>

  <Card title="사용량 모니터링" icon="eye">
    API 사용량을 추적하여 무단 액세스를 감지하세요.
  </Card>
</CardGroup>

## 오류 응답

인증에 실패하면 다음 오류 중 하나가 발생합니다:

| 상태 코드 | 오류 코드                    | 설명                              |
| ----- | ------------------------ | ------------------------------- |
| 401   | `MISSING_API_KEY`        | `x-api-key` 헤더가 제공되지 않았습니다      |
| 401   | `INVALID_API_KEY_FORMAT` | API 키가 예상된 `vc_` 접두사를 사용하지 않습니다 |
| 401   | `INVALID_API_KEY`        | 제공된 API 키가 유효하지 않습니다            |
| 403   | `API_ACCESS_REQUIRED`    | 이 계정은 API 액세스가 활성화되어 있지 않습니다    |
| 403   | `SUBSCRIPTION_REQUIRED`  | API를 사용하려면 활성화된 유료 구독이 필요합니다    |
| 403   | `INSUFFICIENT_CREDITS`   | 이 작업을 수행하기에 계정 크레딧이 부족합니다       |

## 오류 응답 예시

```json theme={null}
{
  "code": "INVALID_API_KEY",
  "message": "The provided API key is invalid. Please check your API key and try again."
}
```
