Misoca API v3を使って、請求書を複製してみたいと思った
こんにちは☀️
TRUSTART株式会社のみつです!
Misocaは、無料プランである程度の機能が利用できる請求書サービス。
個人で活動されてる方たちにとっては、制限ありでもこの機能で無料はアツい?と勝手に思ってたり。
請求書の複製をターミナルからコマンドでできないかなぁとふと思い、Misoca API v3でどんなことができるのかなを覗いてみました!
Misoca APIって便利なのでは・・・?
普段、見積書や請求書をパパッと作りたい時に利用しています!
これまでのわたし
同じ会社様宛に毎月発行する請求書があります。
- ログインをする ← ID, PASS入力とか地味に大変ですよね・・(怠惰)
- 画面から複製
- 複製した請求書の変更する部分を変更
がこれまでのわたし。
「頑張って画面から作りましょう」→「はい。」
ではなく・・・
「頑張って画面から作りましょう」→「APIで複製とかすればコマンド一撃で複製できる?」
を実現したい記事です。
Misoca API v3の使い方
めちゃくちゃ丁寧にやり方が書いてあり、それ通りに作れば何やらできそうな雰囲気!
書いてある通り、やってみます。
Misoca API v3についてはこちら
STEP1:URLへアクセス
Misoca にログインした状態で、 https://app.misoca.jp/oauth2/applications にアクセスします。
STEP2:アプリ作成
新しいアプリケーション ボタンを押下します。これにより「アプリケーションの作成」画面に遷移します。
次の各項目記入してください。
名称
アプリケーションの名称です。任意の名称をつけることが出来ます。利用権限の確認時に表示されます。
コールバックURL
OAuth2 利用時のコールバックURLです。ここに挙げられたURL以外へはコールバックできません。改行区切りにて複数行記入することが出来ます。
とりあえず、下記を登録してみます。
- 名称
- 何かしらができるアプリ
- コールバックURL
http://localhost:3000/callback
STEP3:画面に出てくる値を眺める
後でアプリ消すし、赤で塗らなくてもいいなぁとか思いながら一応赤塗り。
STEP4:承認チャレンジ → 失敗w
↓
・・・笑
それはそうなんだけど・・・
localhostで何もしてないから、サーバーに接続できませんエラー!笑
STEP5:localhostでなんとなく準備
もはやSTEPに含めるか悩んだ&流れから外れてますけど、一旦ね、一旦。
いい感じのファイルを準備する。
コードたち
mkdir test & cd test
npm init -y
npm install express axios
touch serve.js
- 下記のコードを書いておく(ChatGPTで生成しました)
const express = require('express');
const axios = require('axios');
const app = express();
const CLIENT_ID = 'アプリケーションID';
const CLIENT_SECRET = 'シークレット';
const REDIRECT_URI = 'コールバックURL';
app.get('/callback', async (req, res) => {
const code = req.query.code;
try {
const tokenRes = await axios.post(
'https://app.misoca.jp/oauth2/token',
new URLSearchParams({
grant_type: 'authorization_code',
code: code,
redirect_uri: REDIRECT_URI,
}),
{
auth: {
username: CLIENT_ID,
password: CLIENT_SECRET,
},
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
}
);
res.send(`
<h1>アクセストークン取得成功!</h1>
<pre>${JSON.stringify(tokenRes.data, null, 2)}</pre>
`);
} catch (error) {
console.error('Token error:', error.response?.data || error.message);
res.send(`<h1>エラー発生</h1><pre>${JSON.stringify(error.response?.data || error.message, null, 2)}</pre>`);
}
});
app.listen(3000, () => {
console.log('サーバー起動中: http://localhost:3000');
});
STEP6:再承認チャレンジ → 成功!
Yes!取得成功!
↓
{
"access_token": "実行に使うトークン",
"token_type": "Bearer",
"expires_in": 86400,
"refresh_token": "更新のためのトークン",
"scope": "write",
"created_at": 1747539783
}
STEP7:次は、何かをコンソールで得たい
せっかくトークンをもらえました。
次は、何かを得たいです!!
curlを使って、jqも使い、綺麗にしちゃって取得します。
レスポンスは、隠す場所多すぎ...笑
一旦、赤背景ボン!
curl -X GET "https://app.misoca.jp/api/v3/invoices" \
-H "Authorization: Bearer 実行に使うトークン" \
-H "Accept: application/json" | jq
↓
STEP8:次は、リフレッシュトークンでトークン更新したい
ここも、jq使って綺麗にしちゃうもんね
リフレッシュトークンもうまいことできてそうな感じです。
curl -X POST "https://app.misoca.jp/oauth2/token" \
-u "アプリケーションID:シークレット" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=refresh_token" \
-d "refresh_token=更新のためのトークン" | jq
↓
いい感じすぎ。
STEP9:あとはAPIドキュメントを読んでみる
トークンもゲットできて、リフレッシュトークンも使えるようになりました。
ここからは、Misoca API v3のドキュメントを見て、どんな使い方できるかなぁの時間。
Misoca API v3ドキュメントのリンクはこちら
色々充実してた
取引先一覧を取得や請求書・見積もり書の一覧を取得、請求書を入金済へ変更とか色々できそう。
ざっと出したいなぁとか、ツンとステータス変えたいなぁ系が充実しててはっぴーな気持ちになりました。
既存の請求書の複製
すでにある請求書を複製をしたいみたいな場合は、APIとして提供はされてなさそげな感じもしつつ、組み合わせでできるからあえてないんだろうかとも思いつつ。
既存の請求書を取得、必要項目変えてPOSTすれば良さそうでした(APIあったらめっちゃごめんなさい)
curl -s -H "Authorization: Bearer 実行に使うトークン" https://app.misoca.jp/api/v3/invoice/{請求書のID} \
| jq '{
subject: (.subject + "(複製)"),
contact_id,
issue_date: "2025-05-18",
payment_due_on: "2025-06-01",
body,
items
}' \
| curl -X POST https://app.misoca.jp/api/v3/invoice \
-H "Authorization: Bearer 実行に使うトークン" \
-H "Content-Type: application/json" \
--data @-
↓
バッチリすぎ。
まとめ
Misoca API v3で提供されている機能のおかげでターミナルから出ない生活が捗りそうです。
今回はlocalhostでコールバック設定をしたので、そこだけちゃんとすれば、あとはノリと勢いで使っていきたいです。
おわり。
参考リンク
Misoca関連
jqコマンド
最後に
TRUSTART株式会社は、一緒に働くメンバーを募集しています!
インターンメンバーも大募集中です!
興味を持っていただいた方は、ぜひ弊社のページをご確認ください!!!

「人とデータで全てを可能にする」 不動産領域に関連する、あらゆるビジネスのDX化にチャレンジし、「テクノロジー×人」の力で社会課題を解決するTRUSTART株式会社のテックブログです! 採用情報はこちら:trustart.co.jp/recruit/
Discussion