Miryo API
Documentation/見積書生成API
POST/api/quotes/generate
見積書生成API
日本語フォーマットの見積書PDFを生成するAPIエンドポイントです。顧客情報、発行者情報、見積明細を受け取り、Noto Sans JPフォントを使用したプロフェッショナルなPDF見積書を生成します。フォントサイズ、テーブルカラム構成、税率などを柔軟にカスタマイズでき、コンテンツに応じた自動ページ分割に対応しています。

最小限のリクエスト例(必須パラメータのみ)

curl -X POST https://api.miryo.ai/api/quotes/generate \
  -H "Content-Type: application/json" \
  -H "x-api-key: your_api_key_here" \
  -d '{
    "issuer": {
      "company": "miryo.AI株式会社"
    },
    "customer": {
      "company": "株式会社サンプル"
    },
    "quote": {
      "subject": "システム開発見積",
      "items": [
        {
          "name": "開発作業",
          "quantity": 10,
          "unitPrice": 50000,
          "amount": 500000
        }
      ]
    }
  }' \
  --output quote.pdf

完全なリクエスト例(全オプション指定)

curl -X POST https://api.miryo.ai/api/quotes/generate \
  -H "Content-Type: application/json" \
  -H "x-api-key: your_api_key_here" \
  -d '{
    "issuer": {
      "company": "miryo.AI株式会社",
      "email": "info@miryo.ai",
      "phone": "050-1725-6435",
      "address": "東京都港区...",
      "contactPerson": "山田太郎"
    },
    "customer": {
      "company": "株式会社サンプル",
      "name": "田中花子",
      "email": "tanaka@example.com",
      "phone": "03-9876-5432",
      "department": "営業部",
      "position": "部長",
      "nameKana": "タナカ ハナコ",
      "zipCode": "150-0001",
      "address": "東京都渋谷区..."
    },
    "quote": {
      "quoteNumber": "QT-2025-001",
      "issueDate": "2025-01-15T09:00:00.000Z",
      "validUntil": "2025-02-14T23:59:59.999Z",
      "subject": "システム開発業務委託",
      "items": [
        {
          "name": "要件定義",
          "majorCategory": "上流工程",
          "description": "システム要件の洗い出しと仕様策定",
          "quantity": 5.0,
          "unitPrice": 80000,
          "amount": 400000
        },
        {
          "name": "基本設計",
          "majorCategory": "上流工程",
          "quantity": 10.0,
          "unitPrice": 70000,
          "amount": 700000
        }
      ],
      "taxRate": 0.1,
      "paymentTerms": "納品後30日以内に指定口座へお振込みください",
      "notes": "見積有効期限: 発行日より30日間\n※金額は税抜価格です",
      "showItemDescription": true,
      "fontSize": {
        "customerCompany": 20,
        "customerName": 16
      },
      "tableColumns": {
        "showNo": true,
        "showMajorCategory": true
      }
    }
  }' \
  --output quote.pdf

リクエストパラメータ

パラメータ必須説明
issuer.companystring必須発行者の会社名
customer.companystring必須顧客の会社名
customer.namestring任意顧客の担当者名(デフォルト: 表示なし)
customer.emailstring任意顧客のメールアドレス(email形式、デフォルト: 表示なし)
customer.phonestring任意顧客の電話番号(デフォルト: 表示なし)
quote.subjectstring必須見積件名・タイトル
quote.itemsarray必須見積明細の配列(最低1件必要)
quote.items[].namestring必須明細項目名
quote.items[].quantitynumber必須数量(正の数値)
quote.items[].unitPricenumber必須単価(0以上の数値)
quote.items[].amountnumber必須金額(0以上の数値)= quantity × unitPrice
issuer.emailstring任意発行者のメールアドレス(デフォルト: 表示なし)
issuer.phonestring任意発行者の電話番号(デフォルト: 表示なし)
issuer.addressstring任意発行者の住所(デフォルト: 表示なし)
issuer.contactPersonstring任意発行者の担当者名(デフォルト: 表示なし)
customer.departmentstring任意顧客の部署名(デフォルト: 表示なし)
customer.positionstring任意顧客の役職(デフォルト: 表示なし)
customer.nameKanastring任意顧客名のカナ表記(デフォルト: 表示なし)
customer.zipCodestring任意顧客の郵便番号(デフォルト: 表示なし)
customer.addressstring任意顧客の住所(デフォルト: 表示なし)
quote.quoteNumberstring任意見積書番号(未指定時は表示されません)
quote.issueDatestring任意発行日(ISO 8601形式、デフォルト: 現在日時)
quote.validUntilstring任意有効期限(ISO 8601形式、デフォルト: 発行日+30日)
quote.items[].descriptionstring任意明細項目の詳細説明(デフォルト: 表示なし)
quote.items[].majorCategorystring任意大カテゴリ名(デフォルト: 表示なし、showMajorCategory: true で表示)
quote.notesstring任意備考欄(改行は\nで指定、デフォルト: 表示なし)
quote.paymentTermsstring任意支払条件(デフォルト: 表示なし)
quote.showItemDescriptionboolean任意明細の詳細説明を表示するか(デフォルト: false)
quote.taxRatenumber任意消費税率 0.0~1.0(デフォルト: 0.1 = 10%)
quote.fontSizeobject任意フォントサイズカスタマイズ設定(デフォルト: システム標準値)
quote.fontSize.customerCompanynumber任意顧客会社名のフォントサイズ(デフォルト: 18)
quote.fontSize.customerNamenumber任意顧客担当者名のフォントサイズ(デフォルト: 14)
quote.fontSize.customerOthernumber任意顧客その他情報のフォントサイズ(デフォルト: 10)
quote.fontSize.issuerCompanynumber任意発行者会社名のフォントサイズ(デフォルト: 16)
quote.fontSize.issuerNamenumber任意発行者担当者名のフォントサイズ(デフォルト: 12)
quote.fontSize.issuerOthernumber任意発行者その他情報のフォントサイズ(デフォルト: 9)
quote.fontSize.itemDetailnumber任意明細詳細のフォントサイズ(デフォルト: 9)
quote.tableColumnsobject任意テーブル列の表示設定(デフォルト: 全てfalse)
quote.tableColumns.showNoboolean任意No列を表示するか(デフォルト: false)
quote.tableColumns.showMajorCategoryboolean任意大カテゴリ列を表示するか(デフォルト: false)

レスポンス

PDF Binary Data (application/pdf)

Response Headers:
Content-Type: application/pdf
Content-Disposition: attachment; filename="quote-QT-2025-001.pdf"
X-Quote-Number: QT-2025-001

注: 見積書番号がリクエストで指定されていない場合、X-Quote-Numberヘッダーは含まれません。

エラーレスポンス

400Bad Request - バリデーションエラー
{
  "error": "Invalid request data",
  "details": [
    {
      "code": "invalid_type",
      "expected": "string",
      "received": "undefined",
      "path": ["customer", "email"],
      "message": "Required"
    }
  ]
}
401Unauthorized - API Keyが未指定
{
  "error": "API key is required"
}

サンプルコード

JavaScript (Node.js)
const axios = require('axios');
const fs = require('fs');

async function generateQuote() {
  const response = await axios.post(
    'https://api.miryo.ai/api/quotes/generate',
    {
      issuer: { company: 'miryo.AI株式会社' },
      customer: {
        company: '株式会社サンプル'
      },
      quote: {
        subject: 'システム開発見積',
        items: [{
          name: '開発作業',
          quantity: 10,
          unitPrice: 50000,
          amount: 500000  // quantity × unitPrice
        }]
      }
    },
    {
      headers: { 'x-api-key': 'your_api_key_here' },
      responseType: 'arraybuffer'
    }
  );

  fs.writeFileSync('quote.pdf', response.data);
  if (response.headers['x-quote-number']) {
    console.log('Quote Number:', response.headers['x-quote-number']);
  }
}
Python
import requests

def generate_quote():
    response = requests.post(
        'https://api.miryo.ai/api/quotes/generate',
        headers={'x-api-key': 'your_api_key_here'},
        json={
            'issuer': {'company': 'miryo.AI株式会社'},
            'customer': {
                'company': '株式会社サンプル'
            },
            'quote': {
                'subject': 'システム開発見積',
                'items': [{
                    'name': '開発作業',
                    'quantity': 10,
                    'unitPrice': 50000,
                    'amount': 500000  # quantity × unitPrice
                }]
            }
        }
    )

    with open('quote.pdf', 'wb') as f:
        f.write(response.content)

    quote_number = response.headers.get('X-Quote-Number')
    if quote_number:
        print('Quote Number:', quote_number)

注意事項

  • 【重要】amount = quantity × unitPrice で計算してください
  • 【日付フォーマット】ISO 8601形式で指定(例: "2025-01-15T09:00:00.000Z")
  • 【税率】デフォルト0.1 (10%)。0.0~1.0の範囲で指定可能
  • 【自動改ページ】コンテンツに応じて自動的に改ページされます
  • 【データ保存】このAPIは見積書を保存しません。PDF生成のみを行います