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"
エンドポイント
| Method | Path | |
|---|---|---|
| GET | /api/v1/links | リンクの一覧を取得します(ページング対応)。 |
| POST | /api/v1/links | 新しい動的リンクを作成します。 |
| GET | /api/v1/links/:id | 1件のリンクを取得します。 |
| 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 | |
|---|---|
unauthorized | 401 — Bearerトークンが未指定・無効・失効済みです。 |
forbidden_scope | 403 — このトークンはAPIキーではありません(別の種類のアクセストークンです)。 |
tier_required | 403 — このワークスペースのプランはもうAPIアクセスを含んでいません(返金・ダウングレード後など)。 |
limit_reached | 402 — プランの上限(動的リンク数など)に達しています。 |
rate_limited | 429 — リクエストが多すぎます。下記の「レート制限」を参照してください。 |
validation_error | 400 — リクエストボディまたはクエリパラメータが検証エラーです。 |
not_found | 404 — リソースが存在しないか、別のワークスペースに属しています。 |
conflict | 409 — 指定したコードが予約語か、既に使用されています。 |
レート制限
APIキーごとに1分間60回までです。429レスポンスには `Retry-After`(秒)ヘッダーと `X-RateLimit-Limit`・`X-RateLimit-Remaining`・`X-RateLimit-Reset` ヘッダーが含まれます。
OpenAPI
機械可読な仕様: openapi.json
limit: 1-100, default 20.