対象プラン
|
法人プラン | ミニマム | ベーシック | プロフェッショナル | エンタープライズ |
個人プラン | スターター | スタンダード | プレミアム |
【注意】本ページはソフトウェア開発者向けのページです
freee APIは、freeeの機能を外部のプログラムから利用するためのインターフェースです。Google Apps Script(GAS)からfreee APIへアクセスし、Googleスプレッドシートと連携することができます。
最新のAPI仕様は「 会計APIリファレンス Version: 2020-06-15 」で公開しています。(検証用のfreeeアカウントについては「 freee API スタートガイド 」をご確認ください。)
freee API
-
Googleスプレッドシートとの連携の活用例
- 各種データのインポート・エクスポートをファイルから直接行う
- Googleスプレッドシートの帳票データをfreeeへ送信する
- その他Googleサービスと組み合わせて連携する
Google Apps Script(GAS)について
Google Apps Script(GAS)はGmailやGoogleカレンダー、GoogleスプレッドシートなどGoogleのサービスを操作できるスクリプト環境です。
このGASを用いてfreee APIにリクエストを送り、Googleスプレッドシートとfreeeの間でデータをやりとりすることができます。例えば、Googleスプレッドシートに記載した取引や入出金明細のデータについて、freeeの「取引」や「明細」として送信するといったことが可能です。
Googleスプレッドシートとの連携の活用例
各種データのインポート・エクスポートをファイルから直接行う
freeeでは勘定科目・口座・取引先・部門といったデータをCSV形式でインポート・エクスポートすることができますが、CSV形式に変換せずにGoogleスプレッドシートとfreeeの間で直接データのやりとりができます。これにより、作業の時間短縮や自動化が可能になります。
Googleスプレッドシートの帳票データをfreeeへ送信する
Googleスプレッドシートで作成している帳票がfreeeに直接インポートできない形式の場合、通常は帳票を見ながらfreeeに転記する作業が必要になります。
Googleスプレッドシートの帳票データから必要な情報を抽出し、「取引」や「明細」としてfreeeへ送信することで、帳票データの送信が可能です。今まで使用していたGoogleスプレッドシートの帳票をそのまま使用しながら、データをfreeeへ送信できます。
その他Googleサービスと組み合わせて連携する
GASが操作できるその他Googleサービス(Gmail・Googleカレンダー・Googleフォームなど)と組み合わせることでさらに業務を効率化できます。
例えば、スプレッドシートから取引をアップロードした際に確認メールを送信する。Googleフォームで貯蔵品の使用や経費を申請し、その取引データをfreeeに送信する。取引の支払期日をGmailやGoogleカレンダーでリマインドする。Googleドライブでスプレッドシートの権限管理をする、複数のスプレッドシートのデータを組み合わせる。といったことが可能です。
Googleスプレッドシートとの連携を開発する
開発の全体像
Googleスプレッドシートとの連携は大きく2つの機能に分けられます。1つは、freee APIと通信し、freee形式のデータをやりとりする機能。もう1つは、Googleスプレッドシートのデータ/freee形式のデータを変換する機能です。
freee APIと通信する機能はデータ形式が定められているため、以下のページを参考に開発することができます。一方、Googleスプレッドシートのデータは用途などにより形式が異なるため、Googleスプレッドシートのデータ/freee形式のデータ間の変換は個別に開発する必要があります。
freee APIと通信する機能の仕様
Googleスプレッドシートとの連携の基本となるfreee APIと通信する機能は、主に以下の手順で行います。
1. freee APIへアプリケーションを登録
2. 認証
3. アクセストークンを取得
4. トークンの有効期限(発行後24h)が切れた場合トークンをリフレッシュ
5. リクエストに必要な情報を事前に取得
6. リクエスト
※「3. アクセストークンを取得」まではヘルプページ「freee APIのアクセストークンを取得する」を参考にしてください。
(例)取引の登録の場合
取引の登録(deals,POST)の場合、アクセストークンの他に事業所ID・勘定科目ID・取引先ID・品目ID・部門ID・メモタグID・口座IDが必要になるため、事前にそれらの情報を取得します。
3.リクエストに必要な情報
freee APIの各リクエストに事前に取得する必要がある情報は以下の通りです。
リクエスト |
リクエスト内容 |
事前に取得する必要のある情報 |
|
Account items |
GET /api/1/account_items |
勘定科目一覧の取得 |
事業所ID |
POST /api/1/account_items |
勘定科目の作成 |
事業所ID・税区分・相手勘定科目・勘定科目カテゴリー |
|
Banks |
GET /api/1/banks |
連携サービス一覧の取得 |
なし |
Companies |
GET /api/1/companies |
事業所一覧の取得 |
なし |
GET /api/1/companies/:id |
事業所の詳細情報の取得 |
事業所ID |
|
PUT /api/1/companies/:id |
事業所情報の更新 |
事業所ID |
|
Deals |
GET /api/1/deals |
取引(収入/支出)一覧の取得 |
事業所ID |
POST /api/1/deals |
取引(収入/支出)の作成 |
事業所ID・取引先ID・勘定科目ID・税区分コード・品目ID・部門ID・メモタグID・口座ID |
|
Items |
GET /api/1/items |
品目一覧の取得 |
事業所ID |
POST /api/1/items |
品目の作成 |
事業所ID |
|
Jounals |
GET /api/1/journals |
ダウンロード要求 |
事業所ID |
GET /api/1/journals/reports/:id/status |
ステータス確認 |
事業所ID |
|
GET /api/1/journals/reports/:id/download |
ダウンロード実行 |
事業所ID |
|
Partners |
GET /api/1/partners |
取引先一覧の取得 |
事業所ID |
POST /api/1/partners |
取引先の作成 |
事業所ID |
|
Sections |
GET /api/1/sections |
部門一覧の取得 |
事業所ID |
POST /api/1/sections |
部門の作成 |
事業所ID |
|
Selectables |
GET /api/1/forms/selectables |
フォーム用選択項目情報の取得 |
事業所ID |
Tags |
GET /api/1/tags |
メモタグ一覧の取得 |
事業所ID |
POST /api/1/tags |
メモタグの作成 |
事業所ID |
|
Taxes |
GET /api/1/taxes/codes |
税区分コード一覧の取得 |
なし |
Transfers |
GET /api/1/transfers |
取引(振替)一覧の取得 |
事業所ID |
POST /api/1/transfers |
取引(振替)の作成 |
事業所ID・口座ID |
|
Users |
GET /api/1/users/me |
ログインユーザ情報の取得 |
なし |
GET /api/1/users/capabilities |
ログインユーザの権限の取得 |
事業所ID |
|
Wallet txns |
GET /api/1/wallet_txns |
明細一覧の取得 |
事業所ID・口座ID |
POST /api/1/wallet_txns |
明細の作成 |
事業所ID・口座ID |
|
Walletables |
GET /api/1/walletables |
口座一覧の取得 |
事業所ID |
POST /api/1/walletables |
口座の作成 |
事業所ID |
詳しくは「 会計APIリファレンス Version: 2020-06-15 」をご参照ください。
サンプルコード
GASからfreee APIへリクエストするサンプルコードです。「 会計APIリファレンス Version: 2020-06-15 」参照し、任意の機能をお使いください。
認証・アクセストークンの取得
認証からアクセストークンを取得するまでのサンプルコードです。このサンプルコードでは外部ライブラリを参照しています。(参照ライブラリはこちら)
「コールバックURI」を設定する必要があります。Googlesスプレッドシートを利用する場合、コールバックURIは以下のとおりです。
https://script.google.com/macros/d/{SCRIPT ID}/usercallback
{SCRIPT ID}を、各自の環境に合わせて書き換えてください。「script ID」は、Google Apps Script エディタ画面の「プロジェクトの設定」→「ID」で確認できます。
下記の要素については、開発するアプリケーションの環境に合わせ、適宜置き換えて用いてください。
要素 |
内容 |
例 |
APP_ID |
freee APIに登録した連携アプリケーションのApp ID |
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" |
SECRET |
freee APIに登録した連携アプリケーションのApp ID |
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" |
/******************************************************************
参照ライブラリ
title |OAuth2
project_key |1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF
******************************************************************/
//連携アプリ情報(Googleスプレッドシートサンプルファイル)
var ss = SpreadsheetApp.getActiveSpreadsheet();
var APP_ID = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
var SECRET = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
/******************************************************************
function name |alertAuth
summary |認証のエンドポイントとなるダイアログ
******************************************************************/
function alertAuth() {
var service = getService();
var authorizationUrl = service.getAuthorizationUrl();
var template = HtmlService.createTemplateFromFile( "認証ダイアログ" );
template.authorizationUrl = authorizationUrl;
var page = template.evaluate();
SpreadsheetApp.getUi().showModalDialog( page , "認証をしてください" );
}
/******************************************************************
function name |getService
summary |freeeAPIのサービスを取得
******************************************************************/
function getService() {
return OAuth2.createService( "freee" )
.setAuthorizationBaseUrl( "https://accounts.secure.freee.co.jp/public_api/authorize" )
.setTokenUrl( "https://accounts.secure.freee.co.jp/public_api/token" )
.setClientId( APP_ID )
.setClientSecret( SECRET )
.setCallbackFunction( "authCallback" )
.setPropertyStore( PropertiesService.getUserProperties() );
}
/******************************************************************
function name |authCallback
summary |認証コールバック
******************************************************************/
function authCallback( request ) {
var service = getService();
var isAuthorized = service.handleCallback( request );
if ( isAuthorized ) {
return HtmlService.createHtmlOutput( "認証に成功しました。タブを閉じてください。" );
} else {
return HtmlService.createHtmlOutput( "認証に失敗しました。" );
};
}
※動作保証対象外
認証ダイアログ.html
<a href="<?= authorizationUrl ?>" target="_blank" rel="noopener">認証する</a>
GETリクエスト
GETリクエストのサンプルコードです。
下記の要素については、開発するアプリケーションの環境に合わせ、適宜置き換えて用いてください。
要素 |
内容 |
例 (事業所一覧の場合) |
ENDPOINT |
GETリクエストするURIエンドポイント |
"https://api.freee.co.jp/api/1/companies" |
TARGET_SHEET |
取得データを保存する任意のシート名 |
(例)"事業所一覧" |
ARRAY_NAME |
取得データの配列名 |
"companies" |
PARAM_NAME |
取得データのパラメーター名 |
"id","name","name_kana","display_name","role" |
function getRequest() {
var freeeApp = getService();
var accessToken = freeeApp.getAccessToken();
var requestUrl =ENDPOINT;
var headers = { "Authorization" : "Bearer " + accessToken };
var targetSheetName = TARGET_SHEET;
var options ={
"method" : "get",
"headers" : headers
};
var res = UrlFetchApp.fetch( requestUrl , options ).getContentText();
//レスポンスのデータを配列に格納
var parsedResponse = JSON.parse( res );
var data = parsedResponse.companies;
var param1 = [];
var param2 = [];
var param3 = [];
var param4 = [];
var param5 = [];
for ( var i = 0 ; i < data.length ; i++ ) {
param1.push( [ data[ i ].PARAM_NAME1 ] );
param2.push( [ data[ i ].PARAM_NAME2 ] );
param3.push( [ data[ i ].PARAM_NAME3 ] );
param4.push( [ data[ i ].PARAM_NAME4 ] );
param5.push( [ data[ i ].PARAM_NAME5 ] );
};
//取得したデータをシートに保存
var sheet = ss.getSheetByName( targetSheetName );
sheet.clear();
sheet.getRange( 1 , 1 , param1.length , 1 ).setValues( param1 );
sheet.getRange( 1 , 2 , param2.length , 1 ).setValues( param2 );
sheet.getRange( 1 , 3 , param3.length , 1 ).setValues( param3 );
sheet.getRange( 1 , 4 , param4.length , 1 ).setValues( param4 );
sheet.getRange( 1 , 5 , param5.length , 1 ).setValues( param5 );
}
※動作保証対象外
POSTリクエスト
POSTリクエストのサンプルコードです。
下記の要素については、開発するアプリケーションの環境に合わせ、適宜置き換えて用いてください。
要素 |
内容 |
例 (勘定科目作成の場合) |
ENDPOINT |
POSTリクエストするURIエンドポイント |
"https://api.freee.co.jp/api/1/account_items" |
REQUEST_BODY |
POSTするデータ |
"{ "company_id" : XXXXXXX, "account_item" : { "name" : "新しい勘定科目", "shortcut" : "NEWACCOUNTITEM", "shortcut_num" : "999", "tax_name" : "課税売上", "group_name" : "その他預金", "account_category" : "現金・預金", "corresponding_income_name" : "売掛金", "corresponding_expense_name" : "買掛金" } }" ※XXXXXXX= 任意の事業所のcompany_id |
function postRequest() {
var freeeApp = getService();
var accessToken = freeeApp.getAccessToken();
var requestUrl = ENDPOINT;
var headers = {"Authorization" : "Bearer " + accessToken };
var requestBody = REQUEST_BODY;
var options = {
"method":"POST",
"headers":headers,
"payload":requestBody,
muteHttpExceptions: true
};
var res = UrlFetchApp.fetch( requestUrl , options );
}
※動作保証対象外
サンプルファイル
Googleスプレッドシートとの連携のサンプルファイルです。
サンプルファイルに関して保証・サポートはおこなっておりません。ご了承ください。
1.取引データをfreeeに送信
取引インポート形式で入力されたデータをfreeeに送信するファイルです。
使用方法GIF
注意事項
- サンプルファイルはセキュリティの都合上、「閲覧のみ」の権限で公開されています。ご利用の際はファイルをコピーしてお使いください。
- freee APIに連携アプリケーションを登録し、App IDとSecretを取得する必要があります。(アプリケーションの登録についてはこちら)
- はじめてご利用する際にスクリプトの実行を承認する必要があります。「このアプリは確認されていません」という内容の警告が表示された場合、サンプルファイル内のシート「googleの警告について」の手順に従って承認します。
- 外部のライブラリを参照しています。詳細はスクリプトから確認できます。
- サンプルファイルで登録された取引は、freee会計側で手動で登録された取引として扱われます。
ファイル一覧