エンジニア・情シス必読!スマレジAPI完全ガイド|認証からPython実装まで

小売・飲食業界におけるDX(デジタルトランスフォーメーション)において、POSレジは単なる「会計機」から、あらゆるデータが集まる「情報ハブ」へと進化しています。
その中心にあるのが、クラウドPOSレジ「スマレジ」が提供する強力なAPIです。

「ECサイトの在庫と店舗在庫をリアルタイムで同期させたい」
「売上データを会計ソフトへ自動連携し、手入力をゼロにしたい」
「顧客の購買履歴をCRMに取り込み、LINEでパーソナライズ配信を行いたい」

これらを実現するためには、スマレジAPIの深い理解と、適切な実装が必要です。
本記事では、スマレジAPIの技術的な仕様、Pythonによる実装例、そして開発工数を劇的に削減するソリューションまでを網羅的に解説します。

スマレジAPIの技術仕様と「新旧」の違い

開発者が最初に直面するのが、「どのAPIを使えばいいのか?」という疑問です。現在、スマレジには新旧2つのAPI仕様が存在します。開発を始める前に、必ず公式ドキュメントで詳細を確認してください。

POS API(旧)とプラットフォームAPI(新)

  • POS API(旧仕様):
    従来からあるAPIですが、機能に制限があり、セキュリティ規格も古いため、新規開発での採用は推奨されません。
    参考:POS API 仕様書(https://help.smaregi.jp/hc/ja/articles/224295527)
  • プラットフォームAPI(新仕様・推奨):
    現在の主流です。OAuth 2.0に基づくセキュアな認証、より詳細なデータアクセス、Webhook対応など、モダンな開発に必要な機能が網羅されています。これから開発を行う場合はこちらを参照してください。
    参考:スマレジ・プラットフォームAPI 仕様書

開発の最初の壁「OAuth 2.0認証」

プラットフォームAPIを利用する際、最大のハードルとなるのが認証プロセスです。

単純なAPIキーを埋め込むのではなく、クライアントIDとシークレットを使って「アクセストークン」を取得し、そのトークンを使ってリクエストを送る必要があります。
さらに、アクセストークンには有効期限があるため、期限切れを検知して自動的に再取得(リフレッシュ)するロジックを実装しなければなりません。

また、取得したアクセストークンおよびリフレッシュトークンは安全に保管する設計が必要です。
ソースコードに直接記載することは避け、シークレット管理サービスや暗号化されたストレージなど、認証情報を安全に管理できる仕組みに保存することが前提となります。

通信制限(レートリミット)への対策

APIには「レートリミット(利用制限)」が設けられています。

例えば、「1分間に何回まで」といった制限を超えてリクエストを送ると、サーバー側からエラーが返されます。大量の過去データを一括取得するバッチ処理などでは、この制限に引っかからないよう、意図的に待機時間(Wait)を入れるなどの制御実装が不可欠です。

【実践編】PythonでスマレジAPIを叩いてみる

では、実際にコードを書くとどのような処理になるのでしょうか。Pythonの標準的なHTTPライブラリ requests を使用した実装イメージを紹介します。

これを見ることで、スクラッチ開発(手組み)に必要な工数感が掴めるはずです。

アクセストークンの取得

まず、APIを叩くための「鍵」を取得します。

import requests
import json

# 認証用URLとクレデンシャル情報
auth_url = "https://id.smaregi.dev/app/sandbox/token"
headers = {
"Content-Type": "application/x-www-form-urlencoded",
"Authorization": "Basic {client_id:client_secret を Base64 エンコードした文字列}"
}


payload = {
    "grant_type": "client_credentials",
    "scope": "pos.products:read pos.transactions:read" # 必要な権限スコープ
}

# トークン取得リクエスト
response = requests.post(auth_url, headers=headers, data=payload)
token_data = response.json()
access_token = token_data["access_token"]

print(f"取得したトークン: {access_token}")

売上取引データの取得(ページネーション処理)

次に、取得したトークンを使って取引データを取得します。ここで注意が必要なのが「ページネーション」です。データ量が多いため、一度のリクエストですべて取得できません。ループ処理でページをめくるような実装が必要です。

api_url = "https://api.smaregi.dev/pos/transactions"
headers = {
    "Authorization": f"Bearer {access_token}",
    "Content-Type": "application/json"
}

all_transactions = []
page = 1

while True:
    params = {
        "transaction_date_from": "2023-10-01",
        "transaction_date_to": "2023-10-01",
        "page": page,
        "limit": 1000 # 1回あたりの取得件数
    }

    res = requests.get(api_url, headers=headers, params=params)
    data = res.json()

    if not data:
        break # データがなくなったら終了

    all_transactions.extend(data)
    page += 1 # 次のページへ

print(f"合計 {len(all_transactions)} 件のデータを取得しました")

いかがでしょうか。単にデータを取るだけでも、認証、スコープ設定、ページ送りのループ処理など、考慮すべきコード量が意外と多いことがわかります。

リアルタイム連携の鍵「Webhook」とは?

ECサイトとの在庫連動など、リアルタイム性が求められるシーンでは、「Webhook(ウェブフック)」機能が重要になります。

ポーリング vs Webhook

  • ポーリング(定期問い合わせ): 「新しい売上ある?」とAPIへ5分おきに聞きに行く方式。タイムラグが発生し、無駄な通信も増えます。
  • Webhook(通知): スマレジ側で「会計完了」などのイベントが発生した瞬間に、外部システムへ通知を飛ばす方式。

在庫連動のシナリオ

Webhookを使えば、以下のようなリアルタイム処理が可能になります。

  1. 実店舗で商品Aが売れる。
  2. スマレジからWebhookで「商品Aが1個減りました」と通知が飛ぶ。
  3. 通知を受け取ったサーバーが、即座にECサイト(Shopifyなど)のAPIを叩き、商品Aの在庫を減らす。

これにより、実店舗で売れた直後にECサイトで売り越してしまう「在庫事故」を防ぐことができます。

自社開発の落とし穴と「保守コスト」の真実

ここまで技術的な実装方法を見てきましたが、社内エンジニアがAPI連携をスクラッチ開発する場合、本当の課題は「リリースした後」にやってきます。

API仕様変更への追随

クラウドサービスのAPIは進化し続けます。ある日突然、仕様変更(バージョンの廃止やレスポンス形式の変更)のアナウンスが届くことがあります。
自社開発の場合、その都度コードを修正し、テストし直さなければなりません。これを見落とすと、ある日突然システムが停止します。

エラーハンドリングの複雑さ

ネットワークの一時的な遮断や、サーバーダウン時の例外処理も重要です。「通信に失敗したら3回までリトライする」「それでもダメなら管理者にメール通知する」といった堅牢なエラー処理を組み込む工数は、本体の開発以上にかかることも珍しくありません。

「作る」をやめ、「つなぐ」に集中する方法とは?

ここまで解説した通り、API連携には「認証」「レートリミット」「ページネーション」「仕様変更追随」といった、本質的な業務とは関係のない技術的な課題が山積みです。

これらをすべて解決し、ビジネスロジックだけに集中するためのソリューションが、データ連携ツール「JOINT」です。

スマレジ専用コネクタが「技術的課題」をすべて吸収

JOINTには、スマレジと接続するための「専用コネクタ(アダプタ)」が搭載されています。
これにより、開発者が以下の処理を気にする必要は一切なくなります。

  • OAuth認証の管理: アクセストークンの取得・保存・リフレッシュはJOINTが自動で行います。
  • ページネーション処理: 1万件のデータでも、自動的にページをめくって最後まで取得します。
  • レートリミット制御: 通信制限にかからないよう、JOINT側で適切にリクエスト間隔を調整します。

ユーザーが考えるべきは「データ処理(ビジネスロジック)」だけ

技術的な「つなぐための苦労」から解放されたユーザーは、本当に重要な「データをどう処理するか」だけに注力できます。

  • 「スマレジの『会員コード』を、kintoneの『顧客ID』とマッピングする」
  • 「売上データの『金額』に消費税計算を加えて、会計ソフトの『借方金額』に渡す」
  • 「店舗区分コードが『A』なら本店へ、『B』なら支店へデータを振り分ける」

JOINT上でこのような設定を行うだけで、高度な連携フローが完成します。スクラッチ開発で数週間かかる実装が、JOINTならば数時間の設定作業で完了し、その後のAPI仕様変更メンテもJOINT側に任せることができます。

まとめ:API活用の最適解を選ぶ

スマレジAPIは非常に強力なツールであり、使いこなせば業務効率は飛躍的に向上します。
しかし、それを実現する手段は「プログラミングによる自社開発」だけではありません。
技術的な足回りの開発・保守にリソースを割くのか、それとも「JOINT」のような専用ツールを活用して、ビジネス価値を生むデータ活用そのものにリソースを集中するのか。
開発スピード、コスト、そして将来の保守性を見据えて、最適な手段を選択してください。

SaaS連携基盤なら「JOINT」にお任せください

ストラテジットは 「AIとSaaSの力をすべての企業に」 をミッションに、連携ツールであり連携基盤でもあるJOINT シリーズを展開しています。
まずは “どんな連携が可能か知りたい” という段階でも、お気軽にご相談ください。

  • SaaSベンダー向けiPaaS「JOINT iPaaS for SaaS
    SaaSベンダーが自社製品に連携機能を簡単に組み込めるEmbedded iPaaS
  • SaaS利用者向けiPaaS「JOINT iPaaS for Biz
    SaaS利用企業向けのデータ連携・業務自動化ソリューション
  • 生成AI連携基盤「JOINT AI Flow
    AIが必要なデータを探し出し、業務フローに沿ってつなげる新しいAI連携サービス

これらのソリューションを通じて、ベンダー・利用企業双方に「つながる価値」を提供します。

自社SaaSの満足度を上げたいSaaSベンダー様、まずは話だけでも聞いてみたいといった企業様は、ストラテジットが提供する 『JOINT』プロダクトを是非ご検討ください。

◆無料相談はこちらよりお気軽にご連絡ください。
◆ストラテジットに関する詳細はこちら

シェアする

アバター画像

この記事を書いた人

株式会社ストラテジット