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

# 認証

> APIアクセストークンの取得と使用方法

## 概要

ZAFA PAY APIはBearer Token認証を使用します。すべてのAPIリクエストには、`Authorization`ヘッダーにアクセストークンを含める必要があります。

## アクセストークンの取得

アクセストークンは加盟店管理画面から取得できます。

<Steps>
  <Step title="管理画面にログイン">
    加盟店管理画面（[https://app.zafapay.com](https://app.zafapay.com)）にログインします
  </Step>

  <Step title="加盟店設定を開く">
    サイドメニューから「加盟店設定」を選択します
  </Step>

  <Step title="アクセストークンを確認">
    「API設定」欄に表示されているアクセストークンを使用します
  </Step>
</Steps>

## API エンドポイント

| 環境         | Base URL                          | 用途      |
| ---------- | --------------------------------- | ------- |
| Sandbox    | `https://api.sandbox.zafapay.com` | テスト・開発用 |
| Production | `https://api.zafapay.com`         | 本番環境    |

<Note>
  Sandbox環境と本番環境では異なるアクセストークンが必要です。
</Note>

## 認証方法

すべてのAPIリクエストで`Authorization`ヘッダーを設定します。

```bash cURL theme={null}
curl https://api.sandbox.zafapay.com/v1/payments \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json"
```

```javascript Node.js theme={null}
const response = await fetch('https://api.sandbox.zafapay.com/v1/payments', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(data)
});
```

## 認証エラー

| エラーコード         | HTTPステータス | 原因             |
| -------------- | --------- | -------------- |
| `unauthorized` | 401       | トークンが不正または期限切れ |
| `forbidden`    | 403       | アカウントが無効化されている |

### エラーレスポンス例

```json 401 Unauthorized theme={null}
{
  "error": {
    "code": "unauthorized",
    "message": "Missing or invalid authorization header"
  }
}
```

```json 403 Forbidden theme={null}
{
  "error": {
    "code": "forbidden",
    "message": "Merchant account is inactive"
  }
}
```

## 公開キー（S2S決済用）

[サーバー間決済](/ja/guide/s2s-payments)では、ブラウザからカード情報をトークン化するために別途**公開キー**を使用します。

| キータイプ    | プレフィックス                   | 用途                 | 公開範囲                |
| -------- | ------------------------- | ------------------ | ------------------- |
| アクセストークン | —                         | すべてのAPI操作（サーバーサイド） | クライアントに**絶対公開しない**  |
| 公開キー     | `pk_test_*` / `pk_live_*` | トークン作成のみ（ブラウザ）     | フロントエンドコードで**使用可能** |

公開キーは加盟店管理画面の **加盟店設定 > API設定** から取得できます。

```javascript ブラウザ theme={null}
// 公開キー — クライアントサイドで安全に使用可能
const zafapay = Zafapay('pk_test_xxxxx');
const { token } = await zafapay.createToken({ ... });
```

<Warning>
  公開キーはトークンの作成のみに使用できます。決済、顧客情報、その他のAPIリソースにはアクセスできません。
</Warning>

## セキュリティのベストプラクティス

🔒 **トークンを安全に保管**<br />
アクセストークンを環境変数やシークレット管理サービスに保存し、コードにハードコードしないでください

🛡️ **HTTPSを使用**<br />
すべてのAPIリクエストはHTTPS経由で行ってください

🖥️ **サーバーサイドで呼び出し**<br />
アクセストークンをクライアントサイド（ブラウザ）に公開しないでください

🔄 **定期的にローテーション**<br />
セキュリティのため、定期的にアクセストークンを再発行してください
