ScanMosaic
REST API · v1

QRコードと短縮リンクをアプリに組み込む

ダイナミックQRコード、短縮リンク、バーコードの作成、移動先の変更、スキャン統計の取得、印刷用QR画像の生成を、すべて自分のコードから行えます。HTTPS上のJSON、APIキーは1つ、エラー内容もわかりやすい仕様です。

ベースURL
https://scanmosaic.com/api/v1
認証
Authorization: Bearer tsk_…
プラン
Business

クイックスタート

  1. ダッシュボード(Businessプラン)でAPIキーを開き、キーを作成します。表示されるのは一度だけなので、コピーしてください。
  2. サーバーの環境変数(例:TESSERA_API_KEY)として保存してください。ブラウザやアプリのコードには絶対に入れないでください。
  3. ダイナミックQRコードを作成します。レスポンスのurlに短縮リンクが含まれます。そのリンクをエンコードするか、/qrから完成した画像をダウンロードしてください。

cURL

curl "https://scanmosaic.com/api/v1/items" \
  -H "Authorization: Bearer $TESSERA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"kind": "qr", "name": "Table menu", "dest": "https://example.com/menu"}'

JavaScript

const res = await fetch("https://scanmosaic.com/api/v1/items", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.TESSERA_API_KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({
    "kind": "qr",
    "name": "Table menu",
    "dest": "https://example.com/menu"
  })
});
const body = await res.json();
if (!res.ok) throw new Error(body.error.message);
console.log(body.data);

Python

import os, requests

r = requests.post(
    "https://scanmosaic.com/api/v1/items",
    headers={"Authorization": f"Bearer {os.environ['TESSERA_API_KEY']}"},
    json={
    "kind": "qr",
    "name": "Table menu",
    "dest": "https://example.com/menu"
},
)
r.raise_for_status()
print(r.json()["data"])

cURL

curl "https://scanmosaic.com/api/v1/qr?item=k3Xp9Qa&size=1024" \
  -H "Authorization: Bearer $TESSERA_API_KEY" \
  -o menu.png

JavaScript

import { writeFile } from "node:fs/promises";

const res = await fetch("https://scanmosaic.com/api/v1/qr?item=k3Xp9Qa&size=1024", {
  headers: { Authorization: `Bearer ${process.env.TESSERA_API_KEY}` },
});
if (!res.ok) throw new Error((await res.json()).error.message);
await writeFile("menu.png", Buffer.from(await res.arrayBuffer()));

Python

import os, requests

r = requests.get(
    "https://scanmosaic.com/api/v1/qr?item=k3Xp9Qa&size=1024",
    headers={"Authorization": f"Bearer {os.environ['TESSERA_API_KEY']}"},
)
r.raise_for_status()
open("menu.png", "wb").write(r.content)

認証

すべてのリクエストのAuthorizationヘッダーにキーを含めて送信してください。キーはtsk_で始まり、1つのワークスペースに紐づきます。そのワークスペースの編集者と同じ範囲の閲覧・変更ができ、ほかのワークスペースには一切アクセスできません。

Authorization: Bearer tsk_AbC123…
  • オーナーと管理者は、ダッシュボードの「APIキー」でキーを作成・削除できます。キーを削除すると、すぐに無効になります。
  • APIはBusinessプランに含まれます。プランが終了すると、更新するまでリクエストは402 business_requiredになります。コードとデータは保持されます。
  • キーを使って行った変更は、ワークスペースのアクティビティログに「API key tsk_…」として表示されます。
  • CORSは開放されているため、どのオリジンからでもAPIを呼び出せます。ただし、ウェブページに含めたキーはページを開いた人なら誰でもコピーできます。APIはサーバーから呼び出してください。

エラー

すべてのエラーは同じJSON形式で、対応するHTTPステータスとともに返されます。codeは固定なので、処理の判定に利用できます。messageはログや人が読むための平易な英語です。paramなどの詳細が加わるエラーもあります。

{
  "error": {
    "code": "bad_param",
    "message": "One of the parameters isn't valid.",
    "status": 400,
    "param": "size",
    "hint": "64 to 2048"
  }
}
エラーコード
ステータスコード意味
400bad_json本文が有効なJSONではありません。
400bad_paramクエリまたはボディのパラメーターが範囲外です。details: param, hint。
400bad_destinationdestが完全なhttp(s)のウェブアドレスではありません。
400bad_kindkindがqr、link、barcodeのいずれでもありません。
400bad_aliasエイリアスが3〜40文字の英数字とダッシュではないか、予約済みです。
400domain_not_verifieddomainがワークスペースの認証済みドメインではありません。
400unsafe_destinationGoogle Web Riskが宛先を危険と判定しました。
400empty / too_long / bad_formatQR画像:データがない、データが多すぎる、またはpng・svg以外の形式です。
400bad_cursorそのカーソルは、当社が発行したものではありません。
401api_key_requiredAuthorizationヘッダーがないか、Bearer tsk_… ではありません
401invalid_api_keyキーが存在しないか、削除されました。
402business_requiredワークスペースがBusinessプランではありません(たとえば、プランが終了した場合)。
403limit_reachedその種類の項目はプランの上限に達しました。details: limit, kind.
404not_foundこのワークスペースに該当する項目はありません。
409alias_takenそのエイリアスは、このドメインですでに使われています。
413too_big本文が大きすぎます(itemsは250 KBまで)。
429rate_limited / daily_limitリクエストが多すぎます。Retry-Afterで示された秒数だけお待ちください。
500server_error当社側で問題が発生しました。バックオフを入れて再試行してください。

レート制限

各キーは、1分あたり120件、1日あたり20,000件のリクエストが可能です。各レスポンスで現在の利用状況がわかります:

ヘッダー意味
X-RateLimit-Limit1分あたりの許可リクエスト数。
X-RateLimit-Remainingこの1分間の残りリクエスト数。
X-RateLimit-Reset1分間のカウントがリセットされるUnix時間です。
Retry-After429の場合のみ: 再試行までの待機秒数。

アイテムの作成は、ワークスペースごとに1時間あたり300件までに制限されており、保存できる件数はプランによって異なります。それ以上必要な場合はお問い合わせください。

ページ送り

一覧は新しい順に、limitで指定した件数まで返されます(デフォルトは25件、最大100件)。has_moreがtrueの場合は、next_cursorをcursorとして渡すと次のページを取得できます。アイテムが追加されても、カーソルは有効なままです。

{
  "data": [
    "\u2026"
  ],
  "has_more": true,
  "next_cursor": "MTc2NzIyNTYwMC5rM1hwOVFh"
}

itemオブジェクト

QRコード、リンク、バーコードはすべて「アイテム」です。単一のアイテムはデータとして、一覧はページング用フィールド付きのデータとして返されます。

アイテムの項目
名前タイプ説明
idstring短いIDです。短縮リンクの末尾の初期値にもなります。
kindqr | link | barcodeその種類です。作成後は変更できません。
typestringコンテンツの種類です。QRコードの場合はurl(デフォルト)、pdf、menu、vcardなど、バーコードの場合はean13、code128など。
namestringラベル(80文字まで)。
deststring | nullスキャンとクリックの転送先です。ホストページとバーコードではnullになります。
urlstringQRコードにエンコードされる短縮リンクです(例:https://go.yourbrand.com/menu)。
aliasstring | nullカスタムエンディング(3~40文字の英数字またはハイフン)です。ドメインごとに固有である必要があります。
domainstring | null認証済みの独自ドメイン。当社のドメインを使う場合はnull。
campaignstring | nullレポート用にアイテムをグループ化します。
contentobject | nullホステッドページのデータ、またはバーコードのデータ({ "data": "…" })。
styleobjectQRコードのデザイン(色、ドットとコーナーのスタイル)。
rulesobject | null振り分けルール(端末、国、時間帯など)。
pausedboolean一時停止中の項目は、リダイレクトせずに「一時停止中」ページを表示します。
disabledboolean規約違反のため、当社により無効にされました。
hitsinteger累計スキャン数(QRコード)またはクリック数(リンク)。
last_hitinteger | null最後のスキャンまたはクリックのUnix時間です。
created / updatedintegerUnix時間です。

エンドポイント

GET /api/v1/me

アカウント

このキーが属するワークスペース、そのプラン、上限、使用状況、確認済みドメイン、レート制限です。キーが動作するかの確認に便利です。

cURL

curl "https://scanmosaic.com/api/v1/me" \
  -H "Authorization: Bearer $TESSERA_API_KEY"

JavaScript

const res = await fetch("https://scanmosaic.com/api/v1/me", {
  headers: { Authorization: `Bearer ${process.env.TESSERA_API_KEY}` },
});
const body = await res.json();
if (!res.ok) throw new Error(body.error.message);
console.log(body.data);

Python

import os, requests

r = requests.get(
    "https://scanmosaic.com/api/v1/me",
    headers={"Authorization": f"Bearer {os.environ['TESSERA_API_KEY']}"},
)
r.raise_for_status()
print(r.json()["data"])
レスポンス 200 OK
{
  "data": {
    "workspace": {
      "id": "w_8fK2mQ",
      "name": "Acme"
    },
    "plan": "business",
    "key": {
      "prefix": "tsk_AbC123",
      "name": "Shopify sync"
    },
    "limits": {
      "qr": 1000,
      "link": 5000,
      "barcode": 10000,
      "domains": 5
    },
    "usage": {
      "dynamic": 12,
      "links": 40,
      "barcodes": 3,
      "storageBytes": 0,
      "workspaces": 1
    },
    "domains": [
      "go.yourbrand.com"
    ],
    "rate_limits": {
      "per_minute": 120,
      "per_day": 20000
    }
  }
}

GET /api/v1/items

アイテム一覧

ワークスペース内のアイテムを新しい順に表示します。

パラメータ
名前タイプ説明
kindqr | link | barcodeこの種類のみ。
typestringこのコンテンツタイプのみ(例: urlやpdf)。
campaignstringこのキャンペーンのみ。
domainstringこのカスタムドメインの項目のみ。
pausedtrue | false一時停止中の項目のみ、または公開中の項目のみ。
qstring名前、リンク先、エイリアスを検索します。
limitinteger1〜100、初期値は25です。
cursorstring前のページのnext_cursor。

cURL

curl "https://scanmosaic.com/api/v1/items?kind=link&campaign=spring&limit=50" \
  -H "Authorization: Bearer $TESSERA_API_KEY"

JavaScript

const res = await fetch("https://scanmosaic.com/api/v1/items?kind=link&campaign=spring&limit=50", {
  headers: { Authorization: `Bearer ${process.env.TESSERA_API_KEY}` },
});
const body = await res.json();
if (!res.ok) throw new Error(body.error.message);
console.log(body.data);

Python

import os, requests

r = requests.get(
    "https://scanmosaic.com/api/v1/items?kind=link&campaign=spring&limit=50",
    headers={"Authorization": f"Bearer {os.environ['TESSERA_API_KEY']}"},
)
r.raise_for_status()
print(r.json()["data"])
レスポンス 200 OK
{
  "data": [
    {
      "id": "k3Xp9Qa",
      "kind": "link",
      "type": "url",
      "name": "Spring menu",
      "dest": "https://example.com/menu",
      "content": null,
      "style": {},
      "rules": null,
      "alias": "menu",
      "domain": "go.yourbrand.com",
      "campaign": "spring",
      "og": null,
      "created": 1767225600,
      "updated": 1767225600,
      "paused": false,
      "disabled": false,
      "hits": 42,
      "last_hit": 1767312000,
      "url": "https://go.yourbrand.com/menu"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

POST /api/v1/items

アイテムを作成

ダイナミックQRコード、短縮リンク、保存済みバーコードを作成します。プランの上限にカウントされます。

パラメータ
名前タイプ説明
kindqr | link | barcodeデフォルト:qr
dest 必須stringリダイレクト先の完全なhttp(s)アドレス。バーコードとホストページでは使用しません。
namestring最大80文字です。
typestringデフォルト:url(コード、リンク)またはcode128(バーコード)
aliasstringカスタムエンディングです。例:menu。3~40文字の英数字またはハイフンで、ドメインごとに固有である必要があります。
domainstring確認済みのカスタムドメインのいずれか(/domainsを参照)。
campaignstring最大60文字です。
styleobjectQRコードのデザイン。例:{"fg": "#112233", "dot": "rounded"}
contentobjectホステッドページまたはバーコードのデータ。バーコードの例:{"bcid": "ean13", "text": "4006381333931"}
rulesobject振り分けルール。
pausedboolean停止状態で開始します。

cURL

curl "https://scanmosaic.com/api/v1/items" \
  -H "Authorization: Bearer $TESSERA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"kind": "link", "name": "Spring menu", "dest": "https://example.com/menu", "alias": "menu", "domain": "go.yourbrand.com", "campaign": "spring"}'

JavaScript

const res = await fetch("https://scanmosaic.com/api/v1/items", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.TESSERA_API_KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({
    "kind": "link",
    "name": "Spring menu",
    "dest": "https://example.com/menu",
    "alias": "menu",
    "domain": "go.yourbrand.com",
    "campaign": "spring"
  })
});
const body = await res.json();
if (!res.ok) throw new Error(body.error.message);
console.log(body.data);

Python

import os, requests

r = requests.post(
    "https://scanmosaic.com/api/v1/items",
    headers={"Authorization": f"Bearer {os.environ['TESSERA_API_KEY']}"},
    json={
    "kind": "link",
    "name": "Spring menu",
    "dest": "https://example.com/menu",
    "alias": "menu",
    "domain": "go.yourbrand.com",
    "campaign": "spring"
},
)
r.raise_for_status()
print(r.json()["data"])
レスポンス 201 Created
{
  "data": {
    "id": "k3Xp9Qa",
    "kind": "link",
    "type": "url",
    "name": "Spring menu",
    "dest": "https://example.com/menu",
    "content": null,
    "style": {},
    "rules": null,
    "alias": "menu",
    "domain": "go.yourbrand.com",
    "campaign": "spring",
    "og": null,
    "created": 1767225600,
    "updated": 1767225600,
    "paused": false,
    "disabled": false,
    "hits": 42,
    "last_hit": 1767312000,
    "url": "https://go.yourbrand.com/menu"
  }
}

GET /api/v1/items/{id}

アイテムを取得

IDで指定した1件の項目。

cURL

curl "https://scanmosaic.com/api/v1/items/k3Xp9Qa" \
  -H "Authorization: Bearer $TESSERA_API_KEY"

JavaScript

const res = await fetch("https://scanmosaic.com/api/v1/items/k3Xp9Qa", {
  headers: { Authorization: `Bearer ${process.env.TESSERA_API_KEY}` },
});
const body = await res.json();
if (!res.ok) throw new Error(body.error.message);
console.log(body.data);

Python

import os, requests

r = requests.get(
    "https://scanmosaic.com/api/v1/items/k3Xp9Qa",
    headers={"Authorization": f"Bearer {os.environ['TESSERA_API_KEY']}"},
)
r.raise_for_status()
print(r.json()["data"])
レスポンス 200 OK
{
  "data": {
    "id": "k3Xp9Qa",
    "kind": "link",
    "type": "url",
    "name": "Spring menu",
    "dest": "https://example.com/menu",
    "content": null,
    "style": {},
    "rules": null,
    "alias": "menu",
    "domain": "go.yourbrand.com",
    "campaign": "spring",
    "og": null,
    "created": 1767225600,
    "updated": 1767225600,
    "paused": false,
    "disabled": false,
    "hits": 42,
    "last_hit": 1767312000,
    "url": "https://go.yourbrand.com/menu"
  }
}

PATCH /api/v1/items/{id}

アイテムを更新

変更したい項目だけを送信してください。destを変更すると次回のスキャンから反映され、印刷済みのコードもそのまま使えます。domainやaliasを変更すると短縮リンクが変わるため、印刷済みのコードは使えなくなります。

パラメータ
名前タイプ説明
name, dest, alias, domain, campaign, style, content, rules, paused作成時と同じです。kind は変更できません。alias、domain、campaign、rules を消去するには null を送信してください。

cURL

curl -X PATCH "https://scanmosaic.com/api/v1/items/k3Xp9Qa" \
  -H "Authorization: Bearer $TESSERA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"dest": "https://example.com/summer-menu", "paused": false}'

JavaScript

const res = await fetch("https://scanmosaic.com/api/v1/items/k3Xp9Qa", {
  method: "PATCH",
  headers: { Authorization: `Bearer ${process.env.TESSERA_API_KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({
    "dest": "https://example.com/summer-menu",
    "paused": false
  })
});
const body = await res.json();
if (!res.ok) throw new Error(body.error.message);
console.log(body.data);

Python

import os, requests

r = requests.patch(
    "https://scanmosaic.com/api/v1/items/k3Xp9Qa",
    headers={"Authorization": f"Bearer {os.environ['TESSERA_API_KEY']}"},
    json={
    "dest": "https://example.com/summer-menu",
    "paused": False
},
)
r.raise_for_status()
print(r.json()["data"])
レスポンス 200 OK
{
  "data": {
    "id": "k3Xp9Qa",
    "kind": "link",
    "type": "url",
    "name": "Spring menu",
    "dest": "https://example.com/summer-menu",
    "content": null,
    "style": {},
    "rules": null,
    "alias": "menu",
    "domain": "go.yourbrand.com",
    "campaign": "spring",
    "og": null,
    "created": 1767225600,
    "updated": 1767225600,
    "paused": false,
    "disabled": false,
    "hits": 42,
    "last_hit": 1767312000,
    "url": "https://go.yourbrand.com/menu"
  }
}

DELETE /api/v1/items/{id}

アイテムを削除

アイテムとそのスキャン履歴を削除します。短縮リンクはただちに使えなくなります。この操作は取り消せません。

cURL

curl -X DELETE "https://scanmosaic.com/api/v1/items/k3Xp9Qa" \
  -H "Authorization: Bearer $TESSERA_API_KEY"

JavaScript

const res = await fetch("https://scanmosaic.com/api/v1/items/k3Xp9Qa", {
  method: "DELETE",
  headers: { Authorization: `Bearer ${process.env.TESSERA_API_KEY}` },
});
const body = await res.json();
if (!res.ok) throw new Error(body.error.message);
console.log(body.data);

Python

import os, requests

r = requests.delete(
    "https://scanmosaic.com/api/v1/items/k3Xp9Qa",
    headers={"Authorization": f"Bearer {os.environ['TESSERA_API_KEY']}"},
)
r.raise_for_status()
print(r.json()["data"])
レスポンス 200 OK
{
  "data": {
    "id": "k3Xp9Qa",
    "deleted": true
  }
}

GET /api/v1/items/{id}/stats

アイテムの統計

期間内のスキャンまたはクリック数。日別の推移に加え、国、端末、OS、ブラウザ、言語、振り分けルール別の内訳を確認できます。ボットはカウントされません。

パラメータ
名前タイプ説明
daysinteger1〜365、初期値は30です。

cURL

curl "https://scanmosaic.com/api/v1/items/k3Xp9Qa/stats?days=7" \
  -H "Authorization: Bearer $TESSERA_API_KEY"

JavaScript

const res = await fetch("https://scanmosaic.com/api/v1/items/k3Xp9Qa/stats?days=7", {
  headers: { Authorization: `Bearer ${process.env.TESSERA_API_KEY}` },
});
const body = await res.json();
if (!res.ok) throw new Error(body.error.message);
console.log(body.data);

Python

import os, requests

r = requests.get(
    "https://scanmosaic.com/api/v1/items/k3Xp9Qa/stats?days=7",
    headers={"Authorization": f"Bearer {os.environ['TESSERA_API_KEY']}"},
)
r.raise_for_status()
print(r.json()["data"])
レスポンス 200 OK
{
  "data": {
    "days": 7,
    "total": 42,
    "last_hit": 1767312000,
    "inRange": 12,
    "series": [
      [
        "2026-01-01",
        3
      ],
      [
        "2026-01-02",
        0
      ],
      [
        "…",
        0
      ]
    ],
    "countries": [
      {
        "k": "GB",
        "n": 7
      },
      {
        "k": "US",
        "n": 5
      }
    ],
    "devices": [
      {
        "k": "Mobile",
        "n": 10
      },
      {
        "k": "Desktop",
        "n": 2
      }
    ],
    "os": [
      {
        "k": "iOS",
        "n": 6
      }
    ],
    "browsers": [
      {
        "k": "Safari",
        "n": 6
      }
    ],
    "langs": [
      {
        "k": "en-gb",
        "n": 7
      }
    ],
    "rules": [
      {
        "k": "default",
        "n": 12
      }
    ]
  }
}

GET /api/v1/qr

QRコード画像

QRコードをPNGまたはSVGで生成します。クエリパラメータ付きのGET、または同じパラメータをJSONにしたPOSTで呼び出せます。itemを渡すと、保存済みコードを専用のデザインと短縮リンクで描画し、dataを渡すと任意のテキストを描画します。

パラメータ
名前タイプ説明
datastringエンコードするテキストまたはリンク(最大2,953バイト)。itemを設定しない場合は必須です。
itemstring保存済みQRコードまたはリンクのID。保存済みデザインのまま、その短縮リンクをエンコードします。
formatpng | svgデフォルト:png
sizeintegerピクセル数。PNGは64〜2048(既定は512)、SVGは64〜4096(既定は1024)。
color#RRGGBBドットの色。初期値は #141A2E です。
background#RRGGBBデフォルト:#FFFFFF
transparentboolean透明な背景です。
corner_color#RRGGBB角の四角形です。デフォルト:color
gradient_color#RRGGBBSVGのみ:斜めグラデーションの2色目。
error_correctionL | M | Q | Hコードがどれだけ汚れや破損に耐えられるか:7%、15%、25%、30%。デフォルトはM(PNG)またはQ(SVG)です。
marginintegerクワイエットゾーン(モジュール数)、0〜8。既定は4。
dot_stylestringsquare, dots, rounded, extra-rounded, classy, classy-rounded
corner_stylestringsquare, extra-rounded, dot
corner_dot_stylestringsquare, dot
downloadstringファイル名:Content-Disposition: attachment を追加します。

PNGは、モジュールごとに整数ピクセルで当社のサーバー上で描画されるため、印刷でも輪郭が鮮明です。グラデーションとロゴはSVGのみ対応です。ロゴはジェネレーターで追加してください。

cURL

curl "https://scanmosaic.com/api/v1/qr" \
  -H "Authorization: Bearer $TESSERA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"data": "https://example.com", "format": "png", "size": 1024, "color": "#4865F0", "dot_style": "rounded", "corner_style": "extra-rounded"}' \
  -o qr.png

JavaScript

import { writeFile } from "node:fs/promises";

const res = await fetch("https://scanmosaic.com/api/v1/qr", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.TESSERA_API_KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({
    "data": "https://example.com",
    "format": "png",
    "size": 1024,
    "color": "#4865F0",
    "dot_style": "rounded",
    "corner_style": "extra-rounded"
  })
});
if (!res.ok) throw new Error((await res.json()).error.message);
await writeFile("qr.png", Buffer.from(await res.arrayBuffer()));

Python

import os, requests

r = requests.post(
    "https://scanmosaic.com/api/v1/qr",
    headers={"Authorization": f"Bearer {os.environ['TESSERA_API_KEY']}"},
    json={
    "data": "https://example.com",
    "format": "png",
    "size": 1024,
    "color": "#4865F0",
    "dot_style": "rounded",
    "corner_style": "extra-rounded"
},
)
r.raise_for_status()
open("qr.png", "wb").write(r.content)

GET /api/v1/domains

ドメイン

ワークスペースのカスタムドメインです。アイテムを作成するときは、readyがtrueのホストをdomainに指定してください。

cURL

curl "https://scanmosaic.com/api/v1/domains" \
  -H "Authorization: Bearer $TESSERA_API_KEY"

JavaScript

const res = await fetch("https://scanmosaic.com/api/v1/domains", {
  headers: { Authorization: `Bearer ${process.env.TESSERA_API_KEY}` },
});
const body = await res.json();
if (!res.ok) throw new Error(body.error.message);
console.log(body.data);

Python

import os, requests

r = requests.get(
    "https://scanmosaic.com/api/v1/domains",
    headers={"Authorization": f"Bearer {os.environ['TESSERA_API_KEY']}"},
)
r.raise_for_status()
print(r.json()["data"])
レスポンス 200 OK
{
  "data": [
    {
      "host": "go.yourbrand.com",
      "verified": true,
      "ready": true
    }
  ]
}

独自ドメイン

Businessプランでは、短縮リンクにgo.yourbrand.com/menuのような独自ドメインを使えます。ダッシュボードの「ドメイン」でドメインを追加して確認します。当社を指すCNAMEレコードと、所有を証明するTXTレコードを追加すれば、SSL証明書を発行します。その後、項目の作成や更新時にdomainを指定してください。

各ドメインでは、ドメイン直下のアドレス(go.yourbrand.com)や未設定のパスを、指定したページにリダイレクトできます。

OpenAPI

APIの全体はopenapi.json(OpenAPI 3.1)に記載されています。Postman、Insomnia、クライアントジェネレーターに読み込めます。

バージョン管理

v1は安定版です。エンドポイント、フィールド、エラーコードを追加する場合があるため、未知のフィールドは無視してください。v1では何も削除・名称変更しません。互換性のない変更はv2として、十分な余裕をもってお知らせします。