QRMaple API v1

プロとプレミアムで使えます。ほかのプランでもこのページは読めますが、APIキーは作れません。

動的QRコード・短縮URLをプログラムから操作するREST APIです。作成・取得・更新・削除、スキャン統計の取得ができます。

プランごとの上限は 料金ページ.

ベースURL

https://qrmaple.com/api/v1

認証方法

すべてのリクエストに `Authorization: Bearer <token>` ヘッダーが必要です。このAPIにCookieセッションでのアクセスはできません。APIキーのみが有効です。

ダッシュボードの「APIキー」画面からキーを作成してください。キーの全文は作成直後の一度だけ表示されます。

クイックスタート

curl -X POST https://qrmaple.com/api/v1/links \
  -H "Authorization: Bearer qrm_live_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"destination":"https://example.com/landing","title":"Spring promo"}'
{
  "id": "018f3a2e-...-b1c2",
  "code": "aB3xQ9z",
  "destination": "https://example.com/landing",
  "title": "Spring promo",
  "domain": null,
  "expires_at": null,
  "active": true,
  "created_at": "2026-09-24T12:00:00.000Z"
}
curl https://qrmaple.com/api/v1/links \
  -H "Authorization: Bearer qrm_live_xxxxxxxxxxxxxxxx"
curl https://qrmaple.com/api/v1/links/018f3a2e-...-b1c2 \
  -H "Authorization: Bearer qrm_live_xxxxxxxxxxxxxxxx"
curl -X PATCH https://qrmaple.com/api/v1/links/018f3a2e-...-b1c2 \
  -H "Authorization: Bearer qrm_live_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"destination":"https://example.com/new-landing"}'
curl "https://qrmaple.com/api/v1/links/018f3a2e-...-b1c2/stats?from=2026-09-01&to=2026-09-30" \
  -H "Authorization: Bearer qrm_live_xxxxxxxxxxxxxxxx"
curl -X DELETE https://qrmaple.com/api/v1/links/018f3a2e-...-b1c2 \
  -H "Authorization: Bearer qrm_live_xxxxxxxxxxxxxxxx"

エンドポイント

MethodPath
GET/api/v1/linksリンクの一覧を取得します(ページング対応)。
POST/api/v1/links新しい動的リンクを作成します。
GET/api/v1/links/:id1件のリンクを取得します。
PATCH/api/v1/links/:idリンクを更新します(遷移先・タイトル・有効期限・有効/無効)。
DELETE/api/v1/links/:idリンクを削除します(論理削除。activeがfalseになります)。
GET/api/v1/links/:id/statsリンクのスキャン統計を取得します(日付範囲での絞り込み可)。

ページング

GET /links は `limit`(1〜100、既定20)と `cursor`(前回レスポンスの `next_cursor` の値)を受け付けます。最後のページでは `next_cursor` がnullになります。

curl "https://qrmaple.com/api/v1/links?limit=50" \
  -H "Authorization: Bearer qrm_live_xxxxxxxxxxxxxxxx"

# {"data": [...], "next_cursor": "eyJjcmVhdGVkX2F0Ijoi..."} -- pass next_cursor back as ?cursor= for the next page

エラー

すべてのエラーレスポンスは `{"error": {"code": "...", "message": "..."}}` の形式です。HTTPステータスは常にcodeと対応します。

{
  "error": {
    "code": "not_found",
    "message": "link not found"
  }
}
code
unauthorized401 — Bearerトークンが未指定・無効・失効済みです。
forbidden_scope403 — このトークンはAPIキーではありません(別の種類のアクセストークンです)。
tier_required403 — このワークスペースのプランはもうAPIアクセスを含んでいません(返金・ダウングレード後など)。
limit_reached402 — プランの上限(動的リンク数など)に達しています。
rate_limited429 — リクエストが多すぎます。下記の「レート制限」を参照してください。
validation_error400 — リクエストボディまたはクエリパラメータが検証エラーです。
not_found404 — リソースが存在しないか、別のワークスペースに属しています。
conflict409 — 指定したコードが予約語か、既に使用されています。

レート制限

APIキーごとに1分間60回までです。429レスポンスには `Retry-After`(秒)ヘッダーと `X-RateLimit-Limit`・`X-RateLimit-Remaining`・`X-RateLimit-Reset` ヘッダーが含まれます。

OpenAPI

機械可読な仕様: openapi.json

limit: 1-100, default 20.