REST APIで自社アプリからQRコードを作成する:10分ガイド
自社システムからQRコードを作るには、行き先URLと自社の参照IDを付けて、認証済みのPOSTをQR Maker REST APIに1回送り、返ってきた短縮リンクを表示します。参照IDで再試行を安全にし、同じ呼び出しでSVGを要求し、ページが変わったら後からPATCHで行き先を変更します。APIはBusinessプランで利用でき、ブラウザではなくサーバーから呼び出す前提です。
必要なもの
- BusinessプランとAPIトークン。トークンは「設定」ページの「API トークン」で作成し、表示されたらすぐコピーしてください。
qrs_で始まり、表示されるのは一度だけです。レポートの取得だけに使うトークンには読み取り専用の権限を選びましょう。 - サーバー側の実行環境。APIはブラウザからのクロスオリジン呼び出しを許可していないので、トークンはサーバーに置いてください。
- 注文番号、SKU、紹介コードなど、自社システム内で各コードを安定して識別する参照値。これが
external_idになります。
ベースURLは https://qrmaker.ai/api/v1 で、すべてのリクエストに Authorization: Bearer qrs_... を付けます。
ステップ1:コードを作成する
curl -X POST "https://qrmaker.ai/api/v1/qrcodes?include=svg" \
-H "Authorization: Bearer $QR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"target_url": "https://shop.example.com/product/AB12CD?ref=qr",
"external_id": "AB12CD",
"name": "Product AB12CD",
"folder": "spring-campaign"
}'
必須なのは target_url だけです。レスポンスにはコードの情報が含まれ、https://qrmk.cc/hzu23X のような short_link と、?include=svg を付けたので svg フィールドにSVGのマークアップが入ります。画像にエンコードしたり共有したりするのは、この短縮リンクだけにしてください。後から target_url を変えても画像は変わりません。
ステップ2:external_idで再試行を安全にする
通信は失敗するものですし、ジョブが二重に実行されることもあります。同じ external_id と同じ target_url を再送しても、APIは2つ目のコードを作らず、既存のコードをステータス200と X-Idempotent-Replay: true ヘッダー付きで返します。既存の external_id に別の target_url を送ると409が返るので、再試行によって印刷済みコードの行き先が知らないうちに変わることはありません。
ステップ3:SVGを使う
SVGはそのまま保存・配信してください。どの印刷サイズにも拡大縮小でき、img タグでも使えます。後で取得するには GET /v1/qrcodes/{id}/svg を呼び出し、必要に応じて size と margin パラメーターを指定します。レスポンスには ETag が付くので、キャッシュしておき、スタイルが変わったときだけ再ダウンロードできます。APIはPNGファイルを生成しません。PNGが必要なら、自社システムでSVGを変換してください。
ステップ4:刷り直さずに行き先を変更する
curl -X PATCH "https://qrmaker.ai/api/v1/qrcodes/by-external-id/AB12CD" \
-H "Authorization: Bearer $QR_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "target_url": "https://shop.example.com/product/AB12CD-v2" }'
自社の参照値でコードを検索できるので、QR MakerのIDを保存しておく必要はまったくありません。新しいURLは、Webサイトで入力した場合と同じ安全チェックを通ります。
ステップ5:結果を読み取る
GET /v1/qrcodes/{id}/analytics は、指定した期間とタイムゾーンで、スキャン数、1日あたりのユニーク訪問者数、国・端末・OS・ブラウザ・参照元・言語・設置場所タグ別の内訳を返します。GET /v1/analytics/summary は多数のコードを1回の呼び出しで集計するので、コードごとにリクエストを送らずに済みます。イベントの流れで受け取りたい場合は、GET /v1/scans が新しいスキャンを順番に返すので、最後に見た next_since_id を保存しておきます。
レート制限と利用枠
各アカウントは1分あたり120回までAPIリクエストを送れ、この枠はアカウント内のすべてのトークンで共有されます。各レスポンスには残りの枠を示すヘッダーが付きます。Businessプランには月50,000回の成功リクエストが含まれ、4xxや5xxで失敗したリクエストはカウントされません。一括処理には POST /v1/qrcodes/batch を使えば1回のリクエストで最大100個のコードを作成でき、それぞれが個別に冪等です。
Nodeの簡単な例
const res = await fetch('https://qrmaker.ai/api/v1/qrcodes?include=svg', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.QR_TOKEN}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ target_url: url, external_id: orderId }),
})
if (!res.ok) throw new Error(`QR API ${res.status}: ${(await res.json()).code}`)
const { data } = await res.json()
// data.short_link が印刷するコードにエンコードされる内容、data.svg が画像
エラー処理では、人が読むためのメッセージではなく、エラーレスポンスの安定した code フィールドを使ってください。
次に読むもの
APIリファレンスにすべてのエンドポイントとエラーコードが載っており、概要ページからOpenAPIファイル、Postmanコレクション、完全なサンプルプログラムにアクセスできます。サーバーを書かずにコードを作りたい場合は、GoogleスプレッドシートやMake・n8n・Zapierのガイドをご覧ください。
よくある質問
ブラウザからAPIを呼び出せますか?
できません。ブラウザから直接APIを呼び出すと、トークンがすべての訪問者に見えてしまいます。サーバーから呼び出し、SVGや短縮リンクをページに渡してください。
トークンが漏れたらどうなりますか?
「設定」で無効化し、新しいトークンを作成してください。トークンで呼び出せるのはQRコードAPIだけで、パスワード、請求、ドメインは変更できません。読み取り専用トークンでは作成、変更、削除は一切できません。
コードに自分のドメインを使えますか?
使えます。Businessプランでは独自の短縮リンク用ドメインを1つ接続できます。コード作成時に short_domain として渡せば、短縮リンクは共有ドメインではなくあなたのドメインになります。