# 外部API リファレンス

## 概要

見積・請求@SOHO の REST API です。
APIキーを使って、請求書・見積書・領収書・顧客の参照と作成、PDFの取得、メールでの送付ができます。
APIキーで扱えるのは、そのキーを発行したワークスペースのデータだけです。

**ベースURL**

```
https://invoice.atsoho.com/api/v1
```

## はじめかた

1. ログインして「設定」の「外部API連携」タブを開き、「新しいAPIキーを発行」を押します
2. 使う機能に合わせてスコープ（権限）を選びます。請求書を作って送付するなら `invoices:write` と `customers:read` が要ります
3. 表示されたAPIキーを控えます。**APIキーは発行時に一度だけ表示されます**
4. `GET /api/v1/issuer-profiles` で発行者プロフィールの ID を調べます。書類の作成に必要です
5. `GET /api/v1/customers` で顧客の ID を調べ、書類を作成します

### Claude Code などのAIに使わせる場合

この説明書をMarkdownのまま読めるURLを用意しています。

```
https://invoice.atsoho.com/docs/api.md
```

AIにこのURLを読ませてから、APIキーを渡してください。
APIキーは、作業に必要なスコープだけを付けたものを発行することをおすすめします。
メールを送る前に `test: true` でテスト送信させると、宛先と文面を確かめられます。

## 認証

### APIキーの発行と管理

「設定」の「外部API連携」タブで行います。

・発行時にスコープと有効期限（無期限、30日、90日、180日、1年）を選びます
・発行後もスコープは「権限変更」で変えられます
・無効にしたキー、有効期限が切れたキーは使えなくなります（401が返ります）
・各キーの最終使用日時と、直近24時間のリクエスト数が画面に出ます

### 認証方法

すべてのリクエストに `Authorization` ヘッダーを付けます。

```
Authorization: Bearer inv_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
```

### スコープ（権限）

| スコープ | できること |
|---------|------|
| `invoices:read` | 請求書の参照、PDFの取得 |
| `invoices:write` | 請求書の作成・更新・削除、メール送付 |
| `estimates:read` | 見積書の参照、PDFの取得 |
| `estimates:write` | 見積書の作成・更新・削除、メール送付 |
| `receipts:read` | 領収書の参照、PDFの取得 |
| `receipts:write` | 領収書の作成・更新・削除、メール送付 |
| `customers:read` | 顧客の参照 |
| `customers:write` | 顧客の作成・更新・削除 |

発行者プロフィール一覧は、書類（請求書・見積書・領収書）のスコープがどれか1つあれば使えます。

## 共通仕様

### リクエスト形式

本文は JSON で送ります。

```
Content-Type: application/json
```

日付は `YYYY-MM-DD` 形式で指定します（例: `2026-10-01`）。時刻付きの形式は受け付けません。
金額は円単位の整数です。

### レスポンス形式

**成功（1件）**

```json
{
  "success": true,
  "data": { }
}
```

**成功（一覧）**

```json
{
  "success": true,
  "data": [ ],
  "pagination": {
    "page": 1,
    "perPage": 20,
    "total": 150,
    "totalPages": 8
  }
}
```

**エラー**

```json
{
  "success": false,
  "error": "エラーメッセージ",
  "code": "VALIDATION_ERROR"
}
```

削除が成功したときは `{"success": true, "data": {"deleted": true}}` が返ります。

### ページネーション

| パラメータ | 型 | 既定 | 説明 |
|-----------|------|----------|------|
| `page` | number | 1 | ページ番号（1から） |
| `perPage` | number | 20 | 1ページの件数（最大100） |

### レート制限

APIキーごとに **1分間に60リクエスト** までです（直近60秒の件数で数えます）。
レスポンスヘッダーで残りの回数が分かります。

```
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1790985600
```

`X-RateLimit-Reset` は制限が戻る時刻（UNIX秒）です。
超えると HTTP 429 が返ります。

### エラーコード

| コード | HTTPステータス | 意味 |
|--------|-------------|------|
| `UNAUTHORIZED` | 401 | APIキーが無い、形式が違う、無効にされている、有効期限が切れている |
| `FORBIDDEN` | 403 | 必要なスコープが無い |
| `NOT_FOUND` | 404 | 対象が見つからない（指定した顧客や発行者プロフィールが無いときも含む） |
| `VALIDATION_ERROR` | 400 | 入力が正しくない。本文が JSON として読めないときも含む |
| `RATE_LIMITED` | 429 | レート制限を超えた |
| `INTERNAL_ERROR` | 500 | サーバー側のエラー |

関連する書類がある顧客・見積書を削除しようとしたときは、HTTP 400 でコード `INTERNAL_ERROR` が返ります。

### CORS

どのオリジンからでも呼び出せます。

```
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, PATCH, OPTIONS
Access-Control-Allow-Headers: Authorization, Content-Type
Access-Control-Max-Age: 86400
```

## 発行者プロフィール (Issuer Profiles)

書類の発行元（自社の名義）です。書類の作成時に `issuerProfileId` として指定します。
ID は画面には出ないので、このAPIで調べてください。

### 発行者プロフィール一覧

```
GET /api/v1/issuer-profiles
```

**必要なスコープ**: 書類のスコープのどれか1つ

アーカイブしたものは含みません。

**レスポンス例**

```json
{
  "success": true,
  "data": [
    { "id": "clxxxxxxxxxxxxxx", "name": "株式会社サンプル", "isDefault": true }
  ]
}
```

## 請求書 (Invoices)

**必要なスコープ**: `invoices:read`（参照・PDF）、`invoices:write`（作成・更新・削除・メール送付）

**状態（status）**

| 値 | 画面の表示 |
|----|-----------|
| `draft` | 作成中 |
| `sent` | 送付済 |
| `paid` | 入金済 |
| `overdue` | 未入金 |

### 請求書一覧

```
GET /api/v1/invoices
```

| パラメータ | 型 | 説明 |
|-----------|------|------|
| `page` | number | ページ番号 |
| `perPage` | number | 1ページの件数 |
| `status` | string | 状態で絞り込む |
| `customerId` | string | 顧客で絞り込む |
| `search` | string | 顧客名で絞り込む（部分一致） |

`search` は取得したページの中だけを絞り込みます。`pagination.total` には反映されません。

各請求書には、明細（`items`）、入金履歴（`payments`）、顧客（`customer` の `id` `name` `email`）、入金済みの額（`paidAmount`）が付きます。

**リクエスト例**

```bash
curl -H "Authorization: Bearer inv_xxxx" \
  "https://invoice.atsoho.com/api/v1/invoices?status=sent&page=1&perPage=10"
```

### 請求書の取得

```
GET /api/v1/invoices/{id}
```

明細、顧客（担当者を含む）、入金履歴、元の見積書が付きます。

### 請求書の作成

```
POST /api/v1/invoices
```

| フィールド | 型 | 必須 | 説明 |
|-----------|------|------|------|
| `issuerProfileId` | string | ○ | 発行者プロフィールの ID |
| `issueDate` | string | ○ | 発行日（`YYYY-MM-DD`） |
| `items` | array | ○ | 明細（1件以上） |
| `customerId` | string | | 顧客の ID |
| `dueDate` | string | | 支払期限（`YYYY-MM-DD`）。省略すると発行日と同じ日 |
| `estimateId` | string | | 元の見積書の ID |
| `subject` | string | | 件名（200字まで） |
| `greeting` | string | | あいさつ文（500字まで） |
| `notes` | string | | 備考（2000字まで） |
| `applyWithholding` | boolean | | 源泉徴収をする |
| `isDraft` | boolean | | `true` で作成中として保存する |

請求書番号は、発行者プロフィールの採番設定に従って自動で付きます。

**明細（items）**

| フィールド | 型 | 必須 | 説明 |
|-----------|------|------|------|
| `description` | string | | 品目 |
| `quantity` | number | ○ | 数量（0より大きい数） |
| `unit` | string | | 単位（例: 式、個、時間） |
| `unitPrice` | number | ○ | 単価（税抜、0以上の整数） |
| `taxRate` | number | ○ | 税率（%）。通常は `10`、軽減税率は `8` |

**リクエスト例**

```bash
curl -X POST \
  -H "Authorization: Bearer inv_xxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "issuerProfileId": "clxxxxxxxxxxxxxx",
    "customerId": "clyyyyyyyyyyyyyy",
    "issueDate": "2026-10-01",
    "dueDate": "2026-10-31",
    "subject": "10月分業務委託費用",
    "items": [
      { "description": "システム開発", "quantity": 1, "unit": "式", "unitPrice": 500000, "taxRate": 10 },
      { "description": "交通費", "quantity": 3, "unit": "回", "unitPrice": 1500, "taxRate": 10 }
    ]
  }' \
  "https://invoice.atsoho.com/api/v1/invoices"
```

### 請求書の更新

```
PUT /api/v1/invoices/{id}
```

本文は作成と同じ形です。明細は送ったもので置き換わります。
`isDraft` が `true` でなければ、`customerId` と1件以上の明細が要ります。
発行者プロフィールは変えられません。

### 請求書の状態の変更

```
PATCH /api/v1/invoices/{id}
```

送ったフィールドだけを変えます。

| フィールド | 型 | 説明 |
|-----------|------|------|
| `status` | string | 状態（`draft` `sent` `paid` `overdue`） |
| `paidAt` | string | 入金日（`YYYY-MM-DD`） |
| `notes` | string | 備考 |

・`paid` 以外に変えると、入金日は消えます
・`paid` に変えると、まだ入金されていない残りの額が入金履歴に記録されます

**リクエスト例**

```bash
curl -X PATCH \
  -H "Authorization: Bearer inv_xxxx" \
  -H "Content-Type: application/json" \
  -d '{"status": "paid", "paidAt": "2026-10-20"}' \
  "https://invoice.atsoho.com/api/v1/invoices/clxxxxxxxxxxxxxx"
```

### 請求書の削除

```
DELETE /api/v1/invoices/{id}
```

### 請求書のPDF

```
GET /api/v1/invoices/{id}/pdf
```

PDFのファイルが返ります（`Content-Type: application/pdf`）。

```bash
curl -H "Authorization: Bearer inv_xxxx" -o invoice.pdf \
  "https://invoice.atsoho.com/api/v1/invoices/clxxxxxxxxxxxxxx/pdf"
```

### 請求書のメール送付

```
POST /api/v1/invoices/{id}/send-email
```

**必要なスコープ**: `invoices:write`

| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
| `to` | string または string[] | ○ | 宛先。誤送信を防ぐため、省略しても顧客のアドレスは補いません |
| `cc` | string または string[] | | CC |
| `bcc` | string または string[] | | BCC |
| `subject` | string | | 件名。省略すると、画面の送信画面に最初に出る件名と同じになります |
| `body` | string | | 本文（テキスト）。省略すると、画面の送信画面に最初に出る本文と同じになります |
| `attachPdf` | boolean | | PDFを添付する（既定 `true`） |
| `sendCopyToSelf` | boolean | | 自社のアドレスに控えを送る（既定 `false`） |
| `test` | boolean | | テスト送信にする（既定 `false`） |

・宛先のアドレスはすべて形式を確かめます。正しくなければ 400 が返ります
・`body` を指定したときも、発行者プロフィールのメール署名が末尾に付きます（本文に既に入っていれば付けません）
・本送信は、画面から送ったときと同じ扱いです。送信履歴に残り、開封が計測され、作成中の請求書は送付済になります

**テスト送信（`test: true`）**

・件名の先頭に【テスト】が付きます
・送信履歴に残らず、状態も変わりません
・`to` の先頭の1件にだけ送ります

**リクエスト例（テスト送信）**

```bash
curl -X POST \
  -H "Authorization: Bearer inv_xxxx" \
  -H "Content-Type: application/json" \
  -d '{"to": "you@example.com", "test": true}' \
  "https://invoice.atsoho.com/api/v1/invoices/clxxxxxxxxxxxxxx/send-email"
```

**レスポンス（テスト送信）**

```json
{
  "success": true,
  "data": {
    "test": true,
    "to": "you@example.com",
    "subject": "【テスト】請求書のご送付（202610-001）",
    "attachedPdf": true,
    "message": "you@example.com にテストメールを送信しました（送信履歴・ステータスは変更していません）"
  }
}
```

**レスポンス（本送信）**

```json
{
  "success": true,
  "mailTrackingEmailId": "…",
  "trackingEmailId": "…"
}
```

本送信のレスポンスには `data` がありません。失敗したときは `success: false` と `error` が返ります。

## 見積書 (Estimates)

**必要なスコープ**: `estimates:read`（参照・PDF）、`estimates:write`（作成・更新・削除・メール送付）

**状態（status）**: `draft`（作成中）、`sent`（送付済）、`accepted`（成約）、`expired`（失効）

### 見積書一覧

```
GET /api/v1/estimates
```

パラメータは請求書一覧と同じです（`page` `perPage` `status` `customerId` `search`）。

### 見積書の取得

```
GET /api/v1/estimates/{id}
```

### 見積書の作成

```
POST /api/v1/estimates
```

| フィールド | 型 | 必須 | 説明 |
|-----------|------|------|------|
| `issuerProfileId` | string | ○ | 発行者プロフィールの ID |
| `issueDate` | string | ○ | 発行日（`YYYY-MM-DD`） |
| `items` | array | ○ | 明細（1件以上。請求書と同じ形） |
| `customerId` | string | | 顧客の ID |
| `validUntil` | string | | 有効期限（`YYYY-MM-DD`）。省略すると発行日と同じ日 |
| `subject` | string | | 件名（200字まで） |
| `notes` | string | | 備考（2000字まで） |
| `isDraft` | boolean | | `true` で作成中として保存する |

### 見積書の更新

```
PUT /api/v1/estimates/{id}
```

本文は作成と同じ形です。

### 見積書の状態の変更

```
PATCH /api/v1/estimates/{id}
```

| フィールド | 型 | 説明 |
|-----------|------|------|
| `status` | string | 状態（`draft` `sent` `accepted` `expired`） |

### 見積書の削除

```
DELETE /api/v1/estimates/{id}
```

請求書を作成済みの見積書は削除できません。

### 見積書のPDF

```
GET /api/v1/estimates/{id}/pdf
```

### 見積書のメール送付

```
POST /api/v1/estimates/{id}/send-email
```

**必要なスコープ**: `estimates:write`

本文の形と動きは、請求書のメール送付と同じです。本送信すると、作成中の見積書は送付済になります。

## 領収書 (Receipts)

**必要なスコープ**: `receipts:read`（参照・PDF）、`receipts:write`（作成・更新・削除・メール送付）

**状態（status）**: `draft`（作成中）、`issued`（発行済）

### 領収書一覧

```
GET /api/v1/receipts
```

| パラメータ | 型 | 説明 |
|-----------|------|------|
| `page` | number | ページ番号 |
| `perPage` | number | 1ページの件数 |
| `status` | string | 状態で絞り込む |
| `customerId` | string | 顧客で絞り込む |
| `search` | string | 顧客名または領収書番号で絞り込む（取得したページの中だけ） |

### 領収書の取得

```
GET /api/v1/receipts/{id}
```

### 領収書の作成

```
POST /api/v1/receipts
```

| フィールド | 型 | 必須 | 説明 |
|-----------|------|------|------|
| `issuerProfileId` | string | ○ | 発行者プロフィールの ID |
| `issueDate` | string | ○ | 発行日（`YYYY-MM-DD`） |
| `customerId` | string | | 顧客の ID |
| `invoiceId` | string | | 元の請求書の ID |
| `receiptDate` | string | | 領収日（`YYYY-MM-DD`）。省略すると発行日と同じ日 |
| `amount` | number | | 金額（0以上の整数） |
| `subject` | string | | 件名 |
| `paymentMethod` | string | | 支払方法（50字まで） |
| `notes` | string | | 備考 |

作成した領収書は作成中（`draft`）になります。発行済にするには、状態の変更かメール送付を使います。

**リクエスト例**

```bash
curl -X POST \
  -H "Authorization: Bearer inv_xxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "issuerProfileId": "clxxxxxxxxxxxxxx",
    "customerId": "clyyyyyyyyyyyyyy",
    "issueDate": "2026-10-20",
    "subject": "コンサルティング費用",
    "amount": 110000,
    "paymentMethod": "銀行振込"
  }' \
  "https://invoice.atsoho.com/api/v1/receipts"
```

### 領収書の更新

```
PUT /api/v1/receipts/{id}
```

送った内容で全体を置き換えます。省いた項目は空になります。
作成中でなければ、`customerId` `issueDate` `receiptDate` `amount` が要ります。

### 領収書の状態の変更

```
PATCH /api/v1/receipts/{id}
```

| フィールド | 型 | 説明 |
|-----------|------|------|
| `status` | string | 状態（`draft` `issued`） |

### 領収書の削除

```
DELETE /api/v1/receipts/{id}
```

### 領収書のPDF

```
GET /api/v1/receipts/{id}/pdf
```

### 領収書のメール送付

```
POST /api/v1/receipts/{id}/send-email
```

**必要なスコープ**: `receipts:write`

本文の形と動きは、請求書のメール送付と同じです。本送信すると、作成中の領収書は発行済になります。

## 顧客 (Customers)

**必要なスコープ**: `customers:read`（参照）、`customers:write`（作成・更新・削除）

### 顧客一覧

```
GET /api/v1/customers
```

| パラメータ | 型 | 説明 |
|-----------|------|------|
| `page` | number | ページ番号 |
| `perPage` | number | 1ページの件数 |
| `search` | string | 顧客名で絞り込む（部分一致） |
| `type` | string | `corporate`（法人）または `individual`（個人） |
| `includeArchived` | boolean | アーカイブした顧客も含める（既定 `false`） |

更新が新しい順に並び、各顧客に担当者（`contacts`）が付きます。

```bash
curl -H "Authorization: Bearer inv_xxxx" \
  "https://invoice.atsoho.com/api/v1/customers?search=サンプル"
```

### 顧客の取得

```
GET /api/v1/customers/{id}
```

担当者と、直近の見積書・請求書（各5件）が付きます。

### 顧客の作成

```
POST /api/v1/customers
```

| フィールド | 型 | 必須 | 説明 |
|-----------|------|------|------|
| `name` | string | ○ | 顧客名 |
| `type` | string | | `corporate`（法人、既定）または `individual`（個人） |
| `honorific` | string | | 敬称（既定は法人「御中」、個人「様」） |
| `department` | string | | 部署 |
| `contactPerson` | string | | 担当者名 |
| `zipCode` | string | | 郵便番号 |
| `address` | string | | 住所 |
| `phone` | string | | 電話番号 |
| `email` | string | | メールアドレス |
| `corporateNumber` | string | | 法人番号 |
| `invoiceNumber` | string | | 適格請求書発行事業者の登録番号 |
| `notes` | string | | 備考 |
| `defaultIssuerProfileId` | string | | この顧客に既定で使う発行者プロフィールの ID |
| `contacts` | array | | 担当者（複数可） |

**担当者（contacts）**

| フィールド | 型 | 説明 |
|-----------|------|------|
| `sortOrder` | number | 表示順 |
| `department` | string | 部署 |
| `contactPerson` | string | 担当者名 |
| `phone` | string | 電話番号 |
| `email` | string | メールアドレス |
| `notes` | string | 備考 |

### 顧客の更新

```
PUT /api/v1/customers/{id}
```

本文は作成と同じ形です。担当者は送ったもので置き換わります。

### 顧客の削除

```
DELETE /api/v1/customers/{id}
```

請求書または見積書がある顧客は削除できません。

## 定期請求 (Recurring Invoices)

毎月などの決まった周期で請求書を自動で作る雛形です。実行日になると、この内容で「作成中」の請求書が作られます。

**必要なスコープ**: `invoices:read`（参照）、`invoices:write`（作成・更新・削除）

**周期（frequency）**

| 値 | 意味 |
|----|------|
| `monthly` | 毎月 |
| `bimonthly` | 隔月 |
| `quarterly` | 3か月ごと |
| `semiannually` | 半年ごと |
| `annually` | 毎年 |

件名・あいさつ文・備考には `{{今月}}` `{{先月}}` `{{次月}}` を書けます。請求書を作るときに「2026年10月」の形に置き換わります。

### 定期請求一覧

```
GET /api/v1/recurring-invoices
```

| パラメータ | 型 | 説明 |
|-----------|------|------|
| `page` | number | ページ番号 |
| `perPage` | number | 1ページの件数 |
| `isActive` | boolean | `true` で有効なものだけ、`false` で停止中のものだけ |
| `customerId` | string | 顧客で絞り込む |

各定期請求には、明細（`items`）と顧客（`customer` の `id` `name` `email`）が付きます。

### 定期請求の取得

```
GET /api/v1/recurring-invoices/{id}
```

明細、顧客、直近10回の実行履歴（`executions`）が付きます。

### 定期請求の作成

```
POST /api/v1/recurring-invoices
```

| フィールド | 型 | 必須 | 説明 |
|-----------|------|------|------|
| `issuerProfileId` | string | ○ | 発行者プロフィールの ID |
| `customerId` | string | ○ | 顧客の ID |
| `name` | string | ○ | 定期請求の名前（200字まで） |
| `items` | array | ○ | 明細（1件以上）。形は請求書の作成と同じ |
| `frequency` | string | | 周期。省略すると `monthly` |
| `dayOfMonth` | number | | 実行日（1〜31）。省略すると `1` |
| `dueDateOffset` | number | | 発行日から支払期限までの日数（0〜90）。省略すると `30` |
| `startDate` | string | | 開始日（`YYYY-MM-DD`）。省略すると今日 |
| `endDate` | string | | 終了日（`YYYY-MM-DD`）。省略すると期限なし |
| `isActive` | boolean | | `false` で停止中として作る |
| `subject` | string | | 件名（200字まで） |
| `greeting` | string | | あいさつ文（500字まで） |
| `notes` | string | | 備考（2000字まで） |
| `memo` | string | | 社内メモ（2000字まで。請求書には載りません） |
| `pdfColorTheme` | string | | PDF の配色。作られる請求書に引き継がれます |
| `pdfFontFamily` | string | | PDF の書体。作られる請求書に引き継がれます |
| `applyWithholding` | boolean | | 源泉徴収をする |

### 定期請求の更新

```
PATCH /api/v1/recurring-invoices/{id}
```

送った項目だけが変わります。`items` を送ると、明細は送ったもので置き換わり、金額も計算し直されます。
`frequency` `dayOfMonth` `startDate` のどれかを送ると、次回の実行日も計算し直されます。
すでに作られた請求書には影響しません。

**リクエスト例**（明細の品目だけを変える）

```bash
curl -X PATCH \
  -H "Authorization: Bearer inv_xxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      { "description": "システム保守・各種相談", "quantity": 1, "unit": "式", "unitPrice": 25000, "taxRate": 10 }
    ]
  }' \
  "https://invoice.atsoho.com/api/v1/recurring-invoices/{id}"
```

### 定期請求の削除

```
DELETE /api/v1/recurring-invoices/{id}
```

雛形を消します。すでに作られた請求書は残ります。

## 利用例

### 請求書を作ってテスト送信し、確かめてから送付する

```bash
KEY="inv_xxxx"
BASE="https://invoice.atsoho.com/api/v1"

# 1. 発行者プロフィールと顧客の ID を調べる
curl -s -H "Authorization: Bearer $KEY" "$BASE/issuer-profiles"
curl -s -H "Authorization: Bearer $KEY" "$BASE/customers?search=サンプル"

# 2. 請求書を作る
INVOICE_ID=$(curl -s -X POST -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"issuerProfileId":"clxxxxxxxxxxxxxx","customerId":"clyyyyyyyyyyyyyy","issueDate":"2026-10-01","dueDate":"2026-10-31","subject":"10月分","items":[{"description":"保守費用","quantity":1,"unit":"式","unitPrice":50000,"taxRate":10}]}' \
  "$BASE/invoices" | jq -r '.data.id')

# 3. 自分宛てにテスト送信して、文面とPDFを確かめる
curl -s -X POST -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"to":"you@example.com","test":true}' "$BASE/invoices/$INVOICE_ID/send-email"

# 4. 顧客へ送付する
curl -s -X POST -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"to":"billing@customer.example.com"}' "$BASE/invoices/$INVOICE_ID/send-email"
```

### 未入金の請求書を探す

```bash
curl -H "Authorization: Bearer inv_xxxx" \
  "https://invoice.atsoho.com/api/v1/invoices?status=sent"
```

## 記録

APIへのリクエストは、メソッド、パス、HTTPステータス、処理時間、IPアドレス、User-Agent を記録しています。
APIキーの認証に失敗したリクエストは記録しません。
