請求書生成API
自社サーバーからプログラムでプロフェッショナルな請求書PDFを生成できます。社内システム、マーケットプレイス、自社のSaaS製品に適しています。
1. 認証#
app.invosend.com/settings/api-keysでAPIキーを作成してください。有料のワークスペースプランとオーナー権限が必要です。
すべてのリクエストで、AuthorizationヘッダーにBearerトークンとしてキーを送信してください:
Authorization: Bearer isk_live_xxxxxxxxxxxxxxxxxxxxxxxx403で拒否されます。ワークスペースが無料プラン、停止中、または期限切れの場合もキーは拒否されます。2. エンドポイント#
ベースURL: https://app.invosend.com
機械可読の API 定義:OpenAPI 3.1 と Postman collection。どちらも Postman、Insomnia、SDK ジェネレーターにインポートできます。
3. リクエストボディ#
完全なリクエスト例:
curl -X POST https://app.invosend.com/api/invoices/generate-external \
-H "Authorization: Bearer isk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"customer_name": "Acme Corp",
"customer_email": "billing@acme.com",
"items": [
{ "description": "Consulting Services", "quantity": 2, "price": 75000, "tax_rate": 11 }
],
"discount_total": 7500,
"currency": "JPY",
"notes": "Thank you for your business."
}'定期請求書の例(最初の1通は今すぐ、以降は毎月1通、合計6通):
curl -X POST https://app.invosend.com/api/invoices/generate-external \
-H "Authorization: Bearer isk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"customer_name": "Acme Corp",
"customer_email": "billing@acme.com",
"items": [
{ "description": "Monthly retainer", "quantity": 1, "price": 375000 }
],
"currency": "JPY",
"recurring_interval": "monthly",
"recurring_count": 6
}'Idempotency-Key ヘッダー(1〜255 文字。請求書ごとに生成した UUID など)を追加してください。最初のリクエストが成功していた場合、再試行では同じレスポンスが Idempotent-Replayed: true ヘッダー付きで返され、請求書の再作成やクレジットの再消費は行われません(credits_remaining は最初の呼び出し時の値です)。キーはワークスペースごとに 24 時間保持されます。保存されるのは成功したレスポンスのみなので、失敗したリクエストは同じキーで再試行できます。4. レスポンス#
200 OKは、請求書が作成されPDFが生成されたことを意味します:
{
"data": {
"id": "cjld2cjxh0000qzrmn831i7rn",
"invoice_number": "INV-1-202609-0016",
"pdf_url": "https://cdn.invosend.com/company/1/pdf/Invoice_INV_1_202609_0016_UNPAID_0da2beeabb.pdf",
"credits_remaining": 24,
"is_recurring": false,
"template": {
"id": "k3p9x2m7c0000abcd1234efgh",
"name": "Classic",
"source": "system_default"
}
}
}credits_remainingはnullになります。idは以下の追加エンドポイントでこの請求書を識別するために使用されます。このAPIで作成された請求書は、ワークスペースの請求書一覧にも表示され、手動作成された請求書と同じ請求書番号の連番を使用します。 請求書番号はINV-{ワークスペースID}-{YYYYMM}-{連番}の形式です。定期請求書の場合、レスポンスにはrecurringオブジェクトも含まれます:schedule_id、interval、occurrences、next_issue_date、end_date。 recurring.schedule_id は、以下の定期エンドポイントで使う ID です。5. エラーコード#
6. レート制限#
X-RateLimit-LimitとX-RateLimit-Remainingヘッダーが含まれます。ワークスペースのAPIクォータは、Invosendのメンバーシッププランごとに設定されています。より高い本番環境のボリュームが必要ですか?ワークスペースアカウントからお問い合わせください。 失効したキーはキー数の上限に含まれません。7. 追加エンドポイント#
同じAPIキーを使用して、generate-externalで作成した請求書を読み取り・管理することもできます:
generate-externalでpayment_gateway(必要に応じてpayment_accountも)を指定し、請求書の公開支払いページhttps://app.invosend.com/p/invoice/{id}(idはAPIが返す値)を顧客に送ってください。顧客はそのページで接続済みのゲートウェイから支払い、請求書は自動的に支払い済みになります。決済はこのページが処理するため、別途呼び出す公開チェックアウト用エンドポイントはありません。8. Webhook#
ポーリングの代わりに HTTPS の URL を登録すると、請求書が変更されるたびに Invosend がその URL へ JSON 本文の POST リクエストを送信します。エンドポイントは 設定 > Webhooks で追加できます(ワークスペースのオーナー、API アクセス付きのプラン、最大 5 件)。各エンドポイントには固有の署名シークレットがあり、表示されるのは一度だけです。
イベントは、ダッシュボードで作成された請求書とこの API で作成された請求書の両方で送信されます。定期請求のテンプレートは送信されません。
すべてのイベントは同じ形式です。data.object は請求書で、GET /api/invoices/external/:id と同じ形です。ステータスのイベントには data.previous_status も含まれます:
{
"id": "evt_9f2c1b7a4e3d5c6b8a1f0e2d",
"object": "event",
"type": "invoice.paid",
"created": "2026-10-01T09:30:12.000Z",
"data": {
"object": {
"id": "cjld2cjxh0000qzrmn831i7rn",
"invoice_number": "INV-1-202610-0007",
"customer_name": "Acme Corp",
"customer_email": "billing@acme.com",
"currency": "USD",
"subtotal": 500,
"discount_total": 0,
"tax_rate": 0,
"tax_amount": 0,
"amount": 500,
"amount_paid": 500,
"amount_credited": 0,
"amount_received": 500,
"invoice_status": "paid",
"is_archived": false,
"is_recurring": false,
"recurring_interval": "none",
"issue_date": "2026-10-01T02:15:40.000Z",
"due_date": "2026-10-15",
"paid_at": "2026-10-01T09:30:11.000Z",
"pdf_url": "https://cdn.invosend.com/company/1/pdf/Invoice_INV_1_202610_0007_PAID.pdf",
"pdf_status": "ready"
},
"previous_status": "unpaid"
}
}各リクエストには次のヘッダーが付きます。検証するには、エンドポイントのシークレットで {t}.{生の本文} の HMAC-SHA256 を計算して v1 と比較し、t が 5 分より古い場合は拒否してください:
POST /your/webhook/url
Content-Type: application/json
Invosend-Event: invoice.paid
Invosend-Delivery: evt_9f2c1b7a4e3d5c6b8a1f0e2d
Invosend-Signature: t=1790847012,v1=5b1d...e9a2
// Node.js
import crypto from "crypto";
function verify(rawBody, header, secret) {
const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
if (Math.abs(Date.now() / 1000 - Number(parts.t)) > 300) return false;
const expected = crypto
.createHmac("sha256", secret)
.update(parts.t + "." + rawBody)
.digest("hex");
return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1));
}2xx ステータスを返してください。それ以外の場合は最大 7 回まで再試行されます(1 分後、5 分後、30 分後、2 時間後、6 時間後、12 時間後、24 時間後)。失敗し続けるエンドポイントは無効になり、通知されます。イベントは複数回、または順不同で届くことがあります。重複はイベントの id で無視し、invoice_status を正としてください。配信ログは 30 日間保存され、設定 > Webhooks から任意のイベントを再送できます。9. 制限事項#
このAPIは、意図的に請求書生成と軽量な請求書管理に範囲を限定しています。以下は現時点では利用できません:
- Webhook の対象は、請求書の作成・支払い済み・期限超過・キャンセルのみです。編集やアーカイブなどその他の変更は送信されません。現在の状態は
GET /invoices/external/:idで取得してください。 - 各リクエストで作成された請求書はメール送信されません。このAPIはPDFの生成のみを行うため、顧客への送付はご自身で行うか、ダッシュボードをご利用ください。例外は定期シリーズで、スケジューラが生成する後続の各請求書は
customer_emailに自動送信されます。 - 作成後の請求書編集は不可 — このAPIで変更できるのは、ステータスとアーカイブ状態のみです。
- 支払いゲートウェイの利用には、ダッシュボードで事前にゲートウェイが接続されている必要があります。このAPIは請求書に紐付けるだけで、単独でゲートウェイを接続することはできません。
- 定期シリーズは API から一時停止・再開・延長・スケジュール変更・今後の回のスキップができますが、内容(明細・顧客・金額)の編集やシリーズの削除は API からはできません。ダッシュボードで行ってください。
よくある質問#
Invosend APIキーはどのように取得しますか?
app.invosend.comでアカウントを作成し、ワークスペースを有料プランにアップグレードした後、Settings > API Keysを開き、Generate keyをクリックしてください。生のキーは作成時に一度だけ表示されます。
請求書生成APIの呼び出し1回あたりの料金はいくらですか?
成功したリクエストごとに、ワークスペース残高から請求書クレジット1件が差し引かれます。ダッシュボードから作成した請求書と同じ請求書クレジットプールを使用します。
このAPIのレート制限はどのくらいですか?
ワークスペースのレート制限は、有料プランの設定に従います。上のRate Limitセクションに、各プランの現在の上限が記載されています。