クイックスタート
- ダッシュボード(Businessプラン)でAPIキーを開き、キーを作成します。表示されるのは一度だけなので、コピーしてください。
- サーバーの環境変数(例:TESSERA_API_KEY)として保存してください。ブラウザやアプリのコードには絶対に入れないでください。
- ダイナミック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.pngJavaScript
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"
}
}
| ステータス | コード | 意味 |
|---|---|---|
| 400 | bad_json | 本文が有効なJSONではありません。 |
| 400 | bad_param | クエリまたはボディのパラメーターが範囲外です。details: param, hint。 |
| 400 | bad_destination | destが完全なhttp(s)のウェブアドレスではありません。 |
| 400 | bad_kind | kindがqr、link、barcodeのいずれでもありません。 |
| 400 | bad_alias | エイリアスが3〜40文字の英数字とダッシュではないか、予約済みです。 |
| 400 | domain_not_verified | domainがワークスペースの認証済みドメインではありません。 |
| 400 | unsafe_destination | Google Web Riskが宛先を危険と判定しました。 |
| 400 | empty / too_long / bad_format | QR画像:データがない、データが多すぎる、またはpng・svg以外の形式です。 |
| 400 | bad_cursor | そのカーソルは、当社が発行したものではありません。 |
| 401 | api_key_required | Authorizationヘッダーがないか、Bearer tsk_… ではありません |
| 401 | invalid_api_key | キーが存在しないか、削除されました。 |
| 402 | business_required | ワークスペースがBusinessプランではありません(たとえば、プランが終了した場合)。 |
| 403 | limit_reached | その種類の項目はプランの上限に達しました。details: limit, kind. |
| 404 | not_found | このワークスペースに該当する項目はありません。 |
| 409 | alias_taken | そのエイリアスは、このドメインですでに使われています。 |
| 413 | too_big | 本文が大きすぎます(itemsは250 KBまで)。 |
| 429 | rate_limited / daily_limit | リクエストが多すぎます。Retry-Afterで示された秒数だけお待ちください。 |
| 500 | server_error | 当社側で問題が発生しました。バックオフを入れて再試行してください。 |
レート制限
各キーは、1分あたり120件、1日あたり20,000件のリクエストが可能です。各レスポンスで現在の利用状況がわかります:
| ヘッダー | 意味 |
|---|---|
X-RateLimit-Limit | 1分あたりの許可リクエスト数。 |
X-RateLimit-Remaining | この1分間の残りリクエスト数。 |
X-RateLimit-Reset | 1分間のカウントがリセットされるUnix時間です。 |
Retry-After | 429の場合のみ: 再試行までの待機秒数。 |
アイテムの作成は、ワークスペースごとに1時間あたり300件までに制限されており、保存できる件数はプランによって異なります。それ以上必要な場合はお問い合わせください。
ページ送り
一覧は新しい順に、limitで指定した件数まで返されます(デフォルトは25件、最大100件)。has_moreがtrueの場合は、next_cursorをcursorとして渡すと次のページを取得できます。アイテムが追加されても、カーソルは有効なままです。
{
"data": [
"\u2026"
],
"has_more": true,
"next_cursor": "MTc2NzIyNTYwMC5rM1hwOVFh"
}
itemオブジェクト
QRコード、リンク、バーコードはすべて「アイテム」です。単一のアイテムはデータとして、一覧はページング用フィールド付きのデータとして返されます。
| 名前 | タイプ | 説明 |
|---|---|---|
id | string | 短いIDです。短縮リンクの末尾の初期値にもなります。 |
kind | qr | link | barcode | その種類です。作成後は変更できません。 |
type | string | コンテンツの種類です。QRコードの場合はurl(デフォルト)、pdf、menu、vcardなど、バーコードの場合はean13、code128など。 |
name | string | ラベル(80文字まで)。 |
dest | string | null | スキャンとクリックの転送先です。ホストページとバーコードではnullになります。 |
url | string | QRコードにエンコードされる短縮リンクです(例:https://go.yourbrand.com/menu)。 |
alias | string | null | カスタムエンディング(3~40文字の英数字またはハイフン)です。ドメインごとに固有である必要があります。 |
domain | string | null | 認証済みの独自ドメイン。当社のドメインを使う場合はnull。 |
campaign | string | null | レポート用にアイテムをグループ化します。 |
content | object | null | ホステッドページのデータ、またはバーコードのデータ({ "data": "…" })。 |
style | object | QRコードのデザイン(色、ドットとコーナーのスタイル)。 |
rules | object | null | 振り分けルール(端末、国、時間帯など)。 |
paused | boolean | 一時停止中の項目は、リダイレクトせずに「一時停止中」ページを表示します。 |
disabled | boolean | 規約違反のため、当社により無効にされました。 |
hits | integer | 累計スキャン数(QRコード)またはクリック数(リンク)。 |
last_hit | integer | null | 最後のスキャンまたはクリックのUnix時間です。 |
created / updated | integer | Unix時間です。 |
エンドポイント
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
アイテム一覧
ワークスペース内のアイテムを新しい順に表示します。
| 名前 | タイプ | 説明 |
|---|---|---|
kind | qr | link | barcode | この種類のみ。 |
type | string | このコンテンツタイプのみ(例: urlやpdf)。 |
campaign | string | このキャンペーンのみ。 |
domain | string | このカスタムドメインの項目のみ。 |
paused | true | false | 一時停止中の項目のみ、または公開中の項目のみ。 |
q | string | 名前、リンク先、エイリアスを検索します。 |
limit | integer | 1〜100、初期値は25です。 |
cursor | string | 前のページの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コード、短縮リンク、保存済みバーコードを作成します。プランの上限にカウントされます。
| 名前 | タイプ | 説明 |
|---|---|---|
kind | qr | link | barcode | デフォルト:qr |
dest 必須 | string | リダイレクト先の完全なhttp(s)アドレス。バーコードとホストページでは使用しません。 |
name | string | 最大80文字です。 |
type | string | デフォルト:url(コード、リンク)またはcode128(バーコード) |
alias | string | カスタムエンディングです。例:menu。3~40文字の英数字またはハイフンで、ドメインごとに固有である必要があります。 |
domain | string | 確認済みのカスタムドメインのいずれか(/domainsを参照)。 |
campaign | string | 最大60文字です。 |
style | object | QRコードのデザイン。例:{"fg": "#112233", "dot": "rounded"} |
content | object | ホステッドページまたはバーコードのデータ。バーコードの例:{"bcid": "ean13", "text": "4006381333931"} |
rules | object | 振り分けルール。 |
paused | boolean | 停止状態で開始します。 |
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、ブラウザ、言語、振り分けルール別の内訳を確認できます。ボットはカウントされません。
| 名前 | タイプ | 説明 |
|---|---|---|
days | integer | 1〜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を渡すと任意のテキストを描画します。
| 名前 | タイプ | 説明 |
|---|---|---|
data | string | エンコードするテキストまたはリンク(最大2,953バイト)。itemを設定しない場合は必須です。 |
item | string | 保存済みQRコードまたはリンクのID。保存済みデザインのまま、その短縮リンクをエンコードします。 |
format | png | svg | デフォルト:png |
size | integer | ピクセル数。PNGは64〜2048(既定は512)、SVGは64〜4096(既定は1024)。 |
color | #RRGGBB | ドットの色。初期値は #141A2E です。 |
background | #RRGGBB | デフォルト:#FFFFFF |
transparent | boolean | 透明な背景です。 |
corner_color | #RRGGBB | 角の四角形です。デフォルト:color |
gradient_color | #RRGGBB | SVGのみ:斜めグラデーションの2色目。 |
error_correction | L | M | Q | H | コードがどれだけ汚れや破損に耐えられるか:7%、15%、25%、30%。デフォルトはM(PNG)またはQ(SVG)です。 |
margin | integer | クワイエットゾーン(モジュール数)、0〜8。既定は4。 |
dot_style | string | square, dots, rounded, extra-rounded, classy, classy-rounded |
corner_style | string | square, extra-rounded, dot |
corner_dot_style | string | square, dot |
download | string | ファイル名: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.pngJavaScript
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として、十分な余裕をもってお知らせします。