Misoca API v3を使っていて、一覧は取得できるのに個別の詳細取得だけが404になる現象に当たった。原因はエンドポイントのパスで、一覧は複数形(/estimates)、詳細取得は単数形(/estimate/{id})という仕様になっている。RESTの慣習で「一覧が/estimatesなら詳細は/estimates/{id}」と思い込むと全部404になる。
実測結果
手元のアカウントの実データで、主要リソースの詳細取得を複数形・単数形の両方のパスで叩き比べた結果がこれ。
| リソース | 複数形 /xxxs/{id} |
単数形 /xxx/{id} |
|---|---|---|
| 取引先(contacts) | 404 | 200 |
| 請求書(invoices) | 404 | 200 |
| 見積書(estimates) | 404 | 200 |
| 納品書(delivery_slips) | 404 | 200 |
| 取引先グループ(contact_groups) | 404 | 200 |
全リソースで結果が揃った。品目(dealing_items)だけは手元にデータがなく未検証だが、他と同じ命名規則と考えてよさそうだ。
つまり見積書の詳細を取るなら、正しいのはこう。
curl -H "Authorization: Bearer アクセストークン" https://app.misoca.jp/api/v3/estimate/12345678
一覧はこう。こちらは複数形。
curl -H "Authorization: Bearer アクセストークン" https://app.misoca.jp/api/v3/estimates
公式ドキュメントどおりではある
公式ドキュメントを見返すと、請求書は一覧がGET /api/v3/invoices、詳細がGET /api/v3/invoice/{id}と、たしかに単数形で書かれている。納品書・取引先グループも同様だった(見積書の詳細取得だけはドキュメント上に記載を見つけられなかったが、上の実測どおり単数形で200が返る)。
なのでMisocaのバグではなく仕様。ただ、一覧と詳細でパスの語形が変わるAPIは珍しいので、ドキュメントを流し読みして実装すると踏む。実際、私が最初に使ったMisoca連携のオープンソース実装は詳細取得がすべて複数形で書かれていて、詳細取得系の機能が全部404で使えない状態だった。この経験がきっかけで、MisocaのMCPサーバーは公式Swagger仕様から自作してOSS公開した。
Misoca APIで「一覧は動くのに詳細だけ404」になったら、まずパスの単数形・複数形を疑うとよい。