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

# 認証

> BIZ MORI API リクエストを認証する方法

すべての API エンドポイントは、**API キー** を Bearer トークン形式で渡して認証する必要があります。

## API キーの発行

1. [ContentCare ダッシュボード](https://app.contentcare.ai) にログインします
2. [**API キー**](https://app.contentcare.ai/keys) に移動します
3. **新規発行** をクリックします
4. キーをコピーして安全に保管します。本番用 API キーは一度しか表示されません。

ダッシュボードでは、アカウントおよび組織ごとにテスト API キーを 1 つずつ自動的に発行します。発行されたキーは API キーページで再度確認できます。詳しい検証手順については [テスト API キー](https://docs.contentcare.ai/ja/test-api-keys.md) を参照してください。

> [!WARNING]
>
> API キーはアカウントの API に対する全アクセス権限を付与します。クライアント側のコード、公開リポジトリ、バージョン管理システムには絶対に公開しないでください。環境変数として保存してください。

## テスト API キー

処理サービスを実際に実行せずに連携を検証したい場合は、自動発行された `sk_test_` プレフィックスのテスト API キーを使用してください。

テスト API キーは次のように動作します。

* 本番用キーと同様に `Authorization: Bearer` 認証を使用します。
* 注文作成および注文履歴 API でテスト注文のライフサイクルを検証できます。
* Anti-AI、watermark、AI Detection の処理は実行されません。
* 外部処理サービスを呼び出さず、クレジットも消費しません。
* アップロードされたファイルの内容は破棄され、結果ファイルは作成されません。

テスト注文は本番注文と分離されます。テストキーで Webhook の管理リクエストを送信すると拒否されます。アップロード URL、状態遷移、ファイル名による決定的な結果については [テスト API キー](https://docs.contentcare.ai/ja/test-api-keys.md) を参照してください。

## API キーの使用方法

すべてのリクエストで `Authorization: Bearer` ヘッダーを使って API キーを渡します。

```bash cURL theme={null}
curl -X POST https://api.bizmori.com/api/v2/orders/anti-ai \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"idempotencyKey": "unique-key", "files": [{"fileName": "image.jpg"}]}'
```

```javascript Node.js theme={null}
const response = await fetch('https://api.bizmori.com/api/v2/orders/anti-ai', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    idempotencyKey: 'unique-key',
    files: [{ fileName: 'image.jpg' }],
  }),
});

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

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

response = requests.post(
    'https://api.bizmori.com/api/v2/orders/anti-ai',
    headers={
        'Authorization': 'Bearer YOUR_API_TOKEN',
    },
    json={
        'idempotencyKey': 'unique-key',
        'files': [{'fileName': 'image.jpg'}],
    },
)
data = response.json()
```

```php PHP theme={null}
<?php
$ch = curl_init('https://api.bizmori.com/api/v2/orders/anti-ai');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer YOUR_API_TOKEN',
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'idempotencyKey' => 'unique-key',
        'files' => [['fileName' => 'image.jpg']],
    ]),
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```ruby Ruby theme={null}
require 'net/http'
require 'json'

uri = URI('https://api.bizmori.com/api/v2/orders/anti-ai')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

req = Net::HTTP::Post.new(uri)
req['Authorization'] = 'Bearer YOUR_API_TOKEN'
req['Content-Type'] = 'application/json'
req.body = JSON.generate(
  idempotencyKey: 'unique-key',
  files: [{ fileName: 'image.jpg' }]
)

data = JSON.parse(http.request(req).body)
```

```go Go theme={null}
package main

import (
	"bytes"
	"encoding/json"
	"net/http"
)

func main() {
	body, _ := json.Marshal(map[string]any{
		"idempotencyKey": "unique-key",
		"files": []map[string]string{{"fileName": "image.jpg"}},
	})

	req, _ := http.NewRequest("POST",
		"https://api.bizmori.com/api/v2/orders/anti-ai",
		bytes.NewBuffer(body),
	)
	req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN")
	req.Header.Set("Content-Type", "application/json")

	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
```

```java Java theme={null}
import java.net.URI;
import java.net.http.*;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.bizmori.com/api/v2/orders/anti-ai"))
    .header("Authorization", "Bearer YOUR_API_TOKEN")
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(
        "{\"idempotencyKey\":\"unique-key\",\"files\":[{\"fileName\":\"image.jpg\"}]}"
    ))
    .build();

HttpResponse<String> response =
    client.send(request, HttpResponse.BodyHandlers.ofString());
```

## 冪等性（Idempotency）

すべての注文作成エンドポイントは `idempotencyKey` パラメータをサポートしています。同じキーで重複したリクエストを送信すると、新しい注文を作成する代わりに **既存の注文を返します**。ネットワーク再試行時の二重処理を防ぐことができます。

```json theme={null}
{
  "idempotencyKey": "2f4b6c82-8a6e-4f39-9f8a-7d3b5c1e2a40",
  "files": [...]
}
```

**UUID v7** の使用を推奨します。ビジネスロジックから導出された決定論的なキー（例: `user-{id}-batch-{timestamp}`）も使用できます。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.